Fórum

Techtudo

PUBLICIDADE

Como criar uma lista encadeada simples?

Perguntou 11 anos atrás

Fechado

Pessoal, faço redes, e estou em uma das cadeiras mais difíceis, estrutura de dados, não entendo quase nada, e preciso de auxílio em um trabalho, alguém manja?

Código: 

typedef struct Funcionario {
int codigo; //código do funcionário
char nome[35]; // nome do funcionário
float salario; // salário do funcionário
struct Funcionario *proximo; // ponteiro que indica o próximo da lista
} Funcionario; 

Funcionario * cria_elemento(char nome[20], int codigo, float salario){
Funcionario * novo;
novo = (Funcionario *) malloc(sizeof(Funcionario));
strcpy(novo->nome,nome); // Para imprimir nomes sempre eh necessario esse comando (strcpy(novo->nome,nome);
novo->codigo = codigo;
novo->salario = salario;
novo->proximo = NULL;
return novo;
}

//Funcao para inserir um elemento na primeira posicao da lista
Funcionario * insere_primeiro(Funcionario * lista, Funcionario * novo){
novo->proximo = lista;
return novo;

}

//Insere o novo elemento na ultima posicao da lista
Funcionario * insere_ultimo(Funcionario * lista, Funcionario * novo){
if (lista != NULL) {
Funcionario * aux = lista;
while (aux->proximo != NULL){
aux = aux->proximo;
}
aux->proximo = novo;
return lista;
}else{
return novo;
}
}

Funcionario * remove_elemento(Funcionario * lista, int posicao){ //Remove elemento da lista

Funcionario * aux = lista;
Funcionario * remove = NULL;
int cont = 1;

if (lista == NULL){ //se lista está vazia
return NULL;
}

while(aux->proximo!= NULL && cont < (posicao-1)){
aux = aux->proximo;
cont++;
}

// se eh a segunda posicao entao so deve atualizar o cont
if (posicao == 2)
{
cont++;
}

if (cont == 1){
if (aux->proximo != NULL)
lista = aux->proximo; // atualiza o inicio.
else
lista = NULL; // caso só exista na lista o proprio a ser removido
free(aux);
}
else {
remove = aux->proximo;
aux->proximo = remove->proximo;
free(remove);
}
return lista;
}

void apresenta_lista(Funcionario * lista){
//Percorrendo os elementos da lista
int cont = 0;
if (lista != NULL){
printf("n");
while (lista != NULL){
printf("%s,%d,%dn", lista->nome,lista->codigo,lista->salario);
printf("n");
lista = lista->proximo;
}
printf("n");
printf("n");
}
}

void calc_media_salario (Funcionario * lista){
// Foi feito um VOID para calcular a Media do salario
float somasalario = 0;
int cont = 0;
float media = 0;

while(lista != NULL){
somasalario = somasalario+lista-&gt;salario;
cont++;
lista = lista-&gt;proximo;
}
printf("A media do salario eh: %f\n", media = somasalario/cont);
}

void menor_salario (Funcionario * lista){
printf("Implementar");

}
void maior_salario (Funcionario * lista){
printf("Implementar");
}

Funcionario * inserir_elemento_na_posicao(Funcionario * lista, Funcionario * novo, int posicao){

Funcionario * aux = lista;
int cont = 1;

if (lista == NULL){
return novo;
}

while(aux->proximo!= NULL && cont < (posicao-1)){
aux = aux->proximo;
cont++;
}

novo->proximo = aux->proximo;
aux->proximo = novo;

if (posicao == 1){
return novo;
}else{
return lista;
}
}
void monta_menu(){
system("cls");
printf("Bem Vindo ao Menu n");
printf("Selecione a opçao desejada n");
printf(" 1 - Adicionar Funcionario n");
printf(" 2 - Excluir Funcionario n");
printf(" 3 - Mostrar Lista n");
printf(" 0 - Sair n");
}

int main() {

//No de referencia - Inicio da Lista
Funcionario * lista = NULL;

//Cria elementos para inserir na lista

int menu = 1;
char nome[20];
int codigo = 0;
float salario = 0;

do{
monta_menu();
scanf("%d", &amp;menu);
switch(menu){
case 1:
printf("Nome: \n");
scanf("%s", &amp;nome);
printf("Codigo: \n");
scanf("%d", &amp;codigo);
printf("Salario: \n");
scanf("%f", &amp;salario);
break;
case 2:
printf("Digite o codigo do funcionario que deseja excluir: \n");
scanf("%d", &amp;codigo);
break;
case 3:
apresenta_lista(lista);
break;
}
}
while (menu != 0);

system ("pause");
}

PUBLICIDADE

Respostas

Deepouter

Deepouter

Membro

11 anos atrás

Esses algorítimos são básicos e já estão embutidos nas linguagens e bancos de dados, mas é bom aprender para desenvolver a lógica de programação.

Para entender melhor a logica, faça diagramas de Chapin de cada função:
alt text

Antes de escrever na linguagem definitiva escreva primeiro em "Português estruturado":
alt text

Cara, este código está péssimo, não usa as técnicas mais básicas de programação estruturada, qualquer professor reprovaria esse aluno.

11 anos atrás

Obrigado pelas dicas pessoal.

marcmira

marcmira

Membro

11 anos atrás

É natural que dificuldades surgem, mas voce não quer orientação pura, apenas deu copypaste no seu exercício.

e isso não é legal.

reveja sua estratégia e boa sorte

11 anos atrás

Não estou fraudando trabalho, só estou pedindo uma luz, uma ajuda. Mesmo assim, muito obrigado!

callazzans

Moderador

11 anos atrás

Preste atenção nas aulas e estude, isso aqui é um fórum e não um site para fraudar trabalhos.

PUBLICIDADE