Ajuda com código em C: Listas encadeadas

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

[code]#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\tMENU 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();
}

[/code]

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:

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:

De uma olhada nesse exemplo:

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

[quote=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++. :)[/quote]

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 )

[quote=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 )[/quote]

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

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.