Bem pessoal queira carregar uma lista dinamicamente encadeada com n caracteres, segue o que eu estou tentando fazer
#include <stdio.h>
#include <stdlib.h>
/*
CRIAR UMA LISTA ENCADEADA DINAMICAMENTE COM n CARACTERES E IMPRIMI-LOS NA TELA
*/
struct node //CRIA UMA ESTRUTURA PARA UMA FILA ENCADEADA QUE GUARDA UMA CARACTERE COMO INFORMAÇÃO
{
char info;
struct node *next;
};
typedef struct node *NODEPTR;
NODEPTR getnode()//CRIA UM NÓ (SÓ ALOCA O ESPAÇO DIMANICAMENTE) E RETORNA UM PONTEIRO PARA O NÓ CRIADO
{
NODEPTR p;
p=(NODEPTR)malloc(sizeof(struct node));
return p;
}
void insafter(NODEPTR p, char ch)//p É UM PONTEIRO PARA O INICIO DA LISTA, ASSIM INSERIMOS O CARACTERE ch DEPOIS DO NÓ
{ //QUE p APONTA
NODEPTR q;
if(p==NULL)
{
printf("Problema de Alocacao");
exit(1);
}
q=getnode();//CRIAMOS O NÓ (SEM NENHUMA INFORMAÇÃO)
q->info=ch;//GUARDAMOS O CARACTERE ch EM info
q->next=p->next;
p->next=p;
}
void imprime_lista(NODEPTR p)//RECEBE UM PONTEIRO p QUE APONTA PARA O INICIO DA LISTA
{
NODEPTR q=p;
while(q!=NULL)
{
printf("\n%c\n",q->info);
q=q->next;
}
}
NODEPTR insere_lista(int n)//CRIA UMA LISTA DINAMICAMENTE ENCADEADA COM n ELEMENTOS
{
NODEPTR p;
int i;
char ch;
for(i=1;i<=n;i++)
{
printf("Entre com o %d elemento da lista:",i);
scanf(" %c",&ch);
if(i==1)//NO PRIMEIRO ELEMENTO DA LISTA p->next APONTA PRA NULL
{
p=getnode();//CRIAMOS O NÓ (SEM NENHUMA INFORMAÇÃO)
p->info=ch;
p->next=NULL;
}
else//DEPOIS DO PRIMEIRO ELEMENTOS ENSERIMOS DEPOIS DELE
insafter(p,ch);
}
return p;
}
NODEPTR cria_no(char ch)
{
NODEPTR p;
p=getnode();
p->info=ch;
p->next=NULL;
return p;
}
int main()
{
NODEPTR p;
int n;
printf("Digite o tamanho da lista:");
scanf("%d",&n);
p=insere_lista(n);
imprime_lista(p);
return 0;
}
Uso essa mesma base para criar listas dinamicamente encadeadeadas com numeros inteiros, mas quando quis guardar caracteres na lista ao invés de inteiros não consigo carregar e nem imprimir a lista.
Pelo que eu pesquiser acho que pode ser uma erro no buffer do teclado, mas não consegui acertar.
Caso algém possa me ajudar, desde já agradeço a atenção.
Pergunta
Bruno Lugão
Bem pessoal queira carregar uma lista dinamicamente encadeada com n caracteres, segue o que eu estou tentando fazer
#include <stdio.h> #include <stdlib.h> /* CRIAR UMA LISTA ENCADEADA DINAMICAMENTE COM n CARACTERES E IMPRIMI-LOS NA TELA */ struct node //CRIA UMA ESTRUTURA PARA UMA FILA ENCADEADA QUE GUARDA UMA CARACTERE COMO INFORMAÇÃO { char info; struct node *next; }; typedef struct node *NODEPTR; NODEPTR getnode()//CRIA UM NÓ (SÓ ALOCA O ESPAÇO DIMANICAMENTE) E RETORNA UM PONTEIRO PARA O NÓ CRIADO { NODEPTR p; p=(NODEPTR)malloc(sizeof(struct node)); return p; } void insafter(NODEPTR p, char ch)//p É UM PONTEIRO PARA O INICIO DA LISTA, ASSIM INSERIMOS O CARACTERE ch DEPOIS DO NÓ { //QUE p APONTA NODEPTR q; if(p==NULL) { printf("Problema de Alocacao"); exit(1); } q=getnode();//CRIAMOS O NÓ (SEM NENHUMA INFORMAÇÃO) q->info=ch;//GUARDAMOS O CARACTERE ch EM info q->next=p->next; p->next=p; } void imprime_lista(NODEPTR p)//RECEBE UM PONTEIRO p QUE APONTA PARA O INICIO DA LISTA { NODEPTR q=p; while(q!=NULL) { printf("\n%c\n",q->info); q=q->next; } } NODEPTR insere_lista(int n)//CRIA UMA LISTA DINAMICAMENTE ENCADEADA COM n ELEMENTOS { NODEPTR p; int i; char ch; for(i=1;i<=n;i++) { printf("Entre com o %d elemento da lista:",i); scanf(" %c",&ch); if(i==1)//NO PRIMEIRO ELEMENTO DA LISTA p->next APONTA PRA NULL { p=getnode();//CRIAMOS O NÓ (SEM NENHUMA INFORMAÇÃO) p->info=ch; p->next=NULL; } else//DEPOIS DO PRIMEIRO ELEMENTOS ENSERIMOS DEPOIS DELE insafter(p,ch); } return p; } NODEPTR cria_no(char ch) { NODEPTR p; p=getnode(); p->info=ch; p->next=NULL; return p; } int main() { NODEPTR p; int n; printf("Digite o tamanho da lista:"); scanf("%d",&n); p=insere_lista(n); imprime_lista(p); return 0; }Uso essa mesma base para criar listas dinamicamente encadeadeadas com numeros inteiros, mas quando quis guardar caracteres na lista ao invés de inteiros não consigo carregar e nem imprimir a lista.
Pelo que eu pesquiser acho que pode ser uma erro no buffer do teclado, mas não consegui acertar.
Caso algém possa me ajudar, desde já agradeço a atenção.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.