Ir para conteúdo
Fórum Script Brasil

Bruno Lugão

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Tudo que Bruno Lugão postou

  1. Fala ae pessoal, consegui resolver. Existiam dois problemas: 1)Na definição da estrura em vez de definir uma caractere eu mudei para um ponteiro para um caractere 2)Limpei o buffer do teclado usando o comando setbuf(stdin,NULL) Agora ta funcionando certinho, segue o código para o pessoal que talvez esteja com o mesmo problema corrigido #include <stdio.h> #include <stdlib.h> #define TAM 3 struct node // aqui eu só criei a estrutura mas não aloquei espaço em memória { char *info; struct node *next; }; typedef struct node *NODEPTR; // Esse é um ponteiro para a estrutura node (nó) NODEPTR getnode() // Cria um novo nó na lista { NODEPTR p; p=(NODEPTR)malloc(sizeof(struct node)); return p; } void freenode (NODEPTR p) // Libera a memória associada a um nó da lista { free(p); } void insafter (NODEPTR p, char x) // Insere um elemento x após o nó p (que é o primeiro nó da lista) { // Essa função insere os elementos depois do nó p, assim ela empurra NODEPTR q; // os elementos que já estão na lista para frente if (p==NULL) // por isso quando imprimimos os elementos aparecem em ordem trocada com { // com exceção do 1 primeiro elemento, pois inserimos depois dele printf("Problema de alocacao"); exit(1); } q=getnode(); q->info=x; q->next=p->next; p->next=q; } void delafter (NODEPTR p) // Deleta o nó seguinte ao nó p { NODEPTR q; if ((p==NULL)||(p->next==NULL)) { printf("Remocao nula"); exit(1); } q=p->next; p->next=q->next; freenode(q); } void imprime_lista(NODEPTR p) //imprime todos os elementos da lista { NODEPTR q=p; while(q!=NULL) { printf("\n%c\n",q->info); q=q->next; } } NODEPTR insere_lista(int x) // cria uma lista com x elementos e retorna um ponteiro para o inicio da lista { NODEPTR p; int i; char ch; for(i=1;i<=x;i++) { printf("\nEntre com %d elemento da lista:",i); scanf("%c",&ch); setbuf(stdin,NULL); if(i==1) // No primeiro nó temos que fazer q->next apontar para NULL { p=getnode(); p->info=ch; p->next=NULL; } else insafter(p,ch); } return p; } int encontrou(NODEPTR p, char V[], int t) { int i; NODEPTR q=p; for(i=0;i<t;i++) { if(q==NULL) return 0; else { if((V[i])==(q->info)) q=q->next; else return 0; } } return 1; } NODEPTR encontra_string(NODEPTR p, char v[]) { NODEPTR q=p; while(q!=NULL) { if(encontrou(q,v,TAM)) return q; else q=q->next; } return NULL; } int main() { NODEPTR p,r; char v[TAM],teste; int x; printf("Digite o numero de elementos da lista:"); scanf("%d",&x); setbuf(stdin,NULL); p=insere_lista(x); imprime_lista(p); setbuf(stdin,NULL); printf("\nDigite uma string com %d elementos:",TAM); gets(v); r=encontra_string(p,v); if(r==NULL) teste='z'; else teste=r->info; printf("\nA funcao encontra string retorna %c\n",teste); return 0; }
  2. 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.
×
×
  • Criar Novo...