Ajuda com código em C: Listas encadeadas

6 respostas
T

Olá, quem pode me ajudar com o código que estou tentando desenvolver para um trabalho de faculdade?
Estou fazendo e colocando para compilar pra ir vendo se esta dando certo mas não estou conseguindo listar a lista que cadastro. Tenho a impressão que o problema é com os ponteiros.

Qualquer ajuda será muito bem vinda.
Desde já agradeço
Tarcisio

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>


typedef struct registro{
       char nome[30];
       long int matricula;
       registro *proximo;
       }registro;
       
registro *principal=NULL;
 
/*PROTOTIPOS*/    
registro *insere();
registro *altera();
void lista();
registro busca();
registro remove();    
      


main()
{
int opcao;

do {
    printf("\t\t******************\n");
    printf("\t\t**MENU DE OPCOES**\n");
    printf("\t\t******************\n\n\n");
    printf("\tESCOLHA UMA OPCAO:\n\n\n");
    printf("1 - Inserir aluno\n"); 
    printf("2 - Alterar aluno\n"); 
    printf("3 - Listar alunos\n"); 
    printf("4 - Buscar aluno\n"); 
    printf("5 - Apagar aluno\n"); 
    printf("6 - Sair\n"); 
    printf("\n");
    printf("-> ");
    scanf("%d",&opcao);
    printf("\n");
    fflush(stdin);
    system("cls");
    }  
while(opcao<1 || opcao>6);

switch (opcao){
           case 1:
                insere();
                break;
          /* case 2:
                altera();
                break;*/
           case 3:
                void lista(registro *principal);
                break;
          /* case 4:
                busca();
                break;
           case 5:
                remove();
                break;*/
           case 6:
                exit(0);
                break; 
               }
              
system("pause");
}
registro *insere()
{
char nome[20];
long int mat;
registro *novo;

if(principal==NULL)
{
principal=(registro *)malloc(sizeof(registro));
printf("digite o nome: ");
gets(nome);
strcpy(principal->nome,nome);
printf("matricula: ");
scanf("%Li",&(principal->matricula));
principal->proximo=novo;
main();
}
else
{
novo=(registro *)malloc(sizeof(registro));
printf("digite o nome: ");
gets(nome);
strcpy(novo->nome,nome);
printf("matricula: ");
scanf("%Li",&(novo->matricula));
novo->proximo=NULL;
system("cls");
main();

}
}
/*void altera()
{
falta fazer
}*/
void lista(registro *novo)
{
printf("Cadastro:\n\n");

	printf("------------\n");
    while(novo!=NULL)
     {
		fprintf(stdout, "Nome: %s\n", novo->nome);
		fprintf(stdout, "matricula: %d\n", novo->matricula);
		fprintf(stdout, "------------\n");
        novo=novo->proximo;
        }
main();        
}

6 Respostas

dudaskank

Opa e aí colega

O problema na verdade está no seu algoritmo de inserção. Para alocar e ler, faça como fez no seu else que está ok. Na hora de colocar o ponteiro é que está errado.

[list]aponte o novo->proximo para nulo[/list]
[list]se o principal é nulo, seu novo passa a ser o principal (principal = novo)[/list]
[list]senão faça como na listagem, ande na sua lista até que o proximo seja nulo, e neste proximo coloque o seu novo.[/list]

Espero que ajude :slight_smile:

ViniGodoy

Comece organizando o seu código:

  1. Melhore a identação;
  2. Separe a lógica do preenchimento da requisição dos dados, da lógica da manipulação da lista;
  3. Separe seu programa em funções;

Se possível, use C++. :slight_smile:

peczenyj

De uma olhada nesse exemplo:

http://www.java2s.com/Code/C/Data-Structure-Algorithm/illustratestheuseandmaintenanceofdoublylinkedlists.htm

tecnocrata

ViniGodoy:
Comece organizando o seu código:

  1. Melhore a identação;
  2. Separe a lógica do preenchimento da requisição dos dados, da lógica da manipulação da lista;
  3. Separe seu programa em funções;

Se possível, use C++. :)

hahaha se possivel use c++ foi otimo …:wink: mas falo por experiencia propria como tem professor desatualizado dando aula por ai ;/ nos 1os periodos da facu era so C ;p

ps: se tiver que ser em C mesmo , usa o livro “C padrao ansi” do kernigham ( so fuja da versao em portugues )

ViniGodoy

tecnocrata:
hahaha se possivel use c++ foi otimo …:wink: mas falo por experiencia propria como tem professor desatualizado dando aula por ai ;/ nos 1os periodos da facu era so C ;p

ps: se tiver que ser em C mesmo , usa o livro “C padrao ansi” do kernigham ( so fuja da versao em portugues )

Esse livro é muito legal.

Se for uma faculdade de engenharia elétrica, não há problemas em ensinar C.
Bem ou mal, ainda é muito usado em microprocessadores.

Se for informática, também acho que é coisa de professor desatualizado. Não vejo porque não começar direto no C++. Nem que seja pela parte estruturada.

Se for estudar C++, eu tenho uma lista de livros recomendados no meu blog:
http://vinigodoy.wordpress.com/roadmap-c

T

Muito obrigado pessoal.
Na verdade não tenho opção de qual linguagem utilizar por se tratar de uma disciplina da
faculdade.
Faço informática e estou no primeiro período.

Criado 16 de junho de 2008
Ultima resposta 18 de jun. de 2008
Respostas 6
Participantes 5