Ir ao conteúdo
  • Cadastre-se

Mateus Santiago 333

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá, fiz o seguinte código que deveria realizar as funções de add,del,rotate e end, sendo que o rotate deveria ser da seguinte forma: add 4 add 3 add 2 add 1 list 1 2 3 4 rotate list 2 3 4 1 add 5 list 5 2 3 4 1 end Mas no meu programa tentei fazer o rotate da seguinte forma(que não funcionou) #include <stdio.h> #include <stdlib.h> struct Lista { int valor; struct Lista * prox; }; void add(struct Lista **p0, int x) { struct Lista *p; p = (struct Lista *)malloc(sizeof(struct Lista)); p->valor = x; if (*p0 == NULL) p->prox = p; else { p->prox = (*p0)->prox; (*p0)->prox = p; } *p0 = p; } void list(struct Lista *p0) { struct Lista *p; if (p0 != NULL) { p = p0; do { printf("%i ", p->valor); p = p->prox; } while (p != p0); } printf("\n"); } struct Lista * del(struct Lista** p0, int v) { struct Lista* ant=NULL; struct Lista* p=*p0; while(p!=NULL && p->valor!=v){ ant=p; p=p->prox; } if(p==NULL){ printf("Erro \n"); return; } if(ant==NULL){ *p0=p->prox; free(p); return *p0; } else{ ant->prox=p->prox; } free(p); return *p0; } void rotate(struct Lista **p0) { struct Lista *pa, *pb; if (*p0 != NULL) { pa = *p0; pb = pa->prox; do { pb->prox = pa; pa = pb; } while (pa != *p0); *p0 = (*p0)->prox; } } main() { int num; char *cmd; char string_enter[50]; struct Lista *p0=NULL; do { gets(string_enter); cmd = strtok(string_enter," "); num = atoi((char *)strtok(NULL," ")); if(strcmp(cmd,"add")== 0){ add(&p0,num); continue; } else if(strcmp(cmd,"list")== 0) { list(p0); continue; } if(strcmp(cmd,"del")== 0){ del(&p0,num); continue; } if(strcmp(cmd,"rotate")== 0){ rotate(&p0); continue; } }while(strcmp(cmd,"end")!= 0); system("pause"); } O que devo fazer?
  2. valeu, era isso mesmo, tava faltando o return, a função ficou: if(Empty(*Pilha)){ printf("Vazio \n"); return;} *Pilha=(*Pilha)->Prox; printf("%i\n", Tmp->valor); free(Tmp);
  3. Olá, eu fiz este programa de pilha que está funcionando e estaria perfeito se não fosse ao digitar pop com a lista vazia o programa parar de funcionar, segue abaixo o código: #include<stdlib.h> #include<stdlib.h> #include<string.h> typedef struct sNo { int valor; struct sNo *Prox; }NO; void inic(NO **Pilha) { *Pilha = NULL; } void push(NO ** Pilha,int Num) { NO * Tmp; Tmp = (NO*)malloc(sizeof(NO)); if(Tmp==NULL)return; Tmp->valor = Num; Tmp->Prox=*Pilha; *Pilha=Tmp; } int Empty(NO * Pilha) { return(Pilha == NULL); } void pop(NO** Pilha) { NO *Tmp =*Pilha; if(Empty(*Pilha)) printf("VAZIA"); *Pilha=(*Pilha)->Prox; printf("%i\n", Tmp->valor); free(Tmp); } int list(NO * Pilha) { if(Empty(Pilha)) return; printf("%d ", Pilha->valor); list(Pilha->Prox); } int peek(NO * Pilha) { if(Empty(Pilha)) return 0; printf("%d\n", Pilha->valor); return Pilha->valor; } int main() { int num_comando; char string_digitada[50]; char *comando; NO *Pilha=NULL; do { gets(string_digitada); comando=strtok(string_digitada," "); num_comando=atoi((char*)strtok(NULL, " ")); if(strcmp(comando,"push")==0) { push(&Pilha,num_comando); continue; } else if(strcmp(comando,"list")==0) { list(Pilha); printf("\n"); continue; } else if(strcmp(comando,"pop")==0) { pop(&Pilha); continue; } else if(strcmp(comando,"peek")==0) { peek(Pilha); continue; } } while(strcmp(comando,"end")!=0); system("pause"); getch(); }
  4. Olá, tenho que fazer um programa que faça a seguinte expressão: (1-2) * (4+5) na notação pós-fixada é igual a: 1 2 - 4 5 + * Para realizar o cálculo, cada operando é empilhado em uma pilha de valores. Quando se encontra um operador, desempilha0se o número apropriado de operandos, realizando-se a operação devida e empilha0se o resultado. Desse modo, na expressão citada, são empilhados os valores 1 e 2. Quando aparece o operador -, 1 e 2 são desempilhados, e o resultado da operação, no caso -1 = (1-2), é colocado no topo da pilha. A seguir, 4 e 5 são empilhados. O operador seguinte, +, desempilha o 4 e o 5 e empilha o resultado da soma = 9. Nesse momento estão na pilha os dois resultados parciais, -1 na base e 9 no topo. O operador *, então, desempilha os dois e coloca -9 (= -1 * 9) no topo da pilha. No que seria possível adaptar o seguinte código para fazer o que está proposto? #include<stdlib.h> #include<stdlib.h> #include<string.h> typedef struct sNo { int valor; struct sNo *Prox; }NO; void inic(NO **Pilha) { *Pilha = NULL; } void push(NO ** Pilha,int Num) { NO * Tmp; Tmp = (NO*)malloc(sizeof(NO)); if(Tmp==NULL)return; Tmp->valor = Num; Tmp->Prox=*Pilha; *Pilha=Tmp; } int Empty(NO * Pilha) { return(Pilha == NULL); } void pop(NO** Pilha) { NO *Tmp =*Pilha; if(Empty(*Pilha)) printf("VAZIA"); *Pilha=(*Pilha)->Prox; printf("%i\n", Tmp->valor); free(Tmp); } int list(NO * Pilha) { if(Empty(Pilha)) return; printf("%d ", Pilha->valor); list(Pilha->Prox); } int peek(NO * Pilha) { if(Empty(Pilha)) return 0; printf("%d\n", Pilha->valor); return Pilha->valor; } int main() { int num_comando; char string_digitada[50]; char *comando; NO *Pilha=NULL; do { gets(string_digitada); comando=strtok(string_digitada," "); num_comando=atoi((char*)strtok(NULL, " ")); if(strcmp(comando,"push")==0) { push(&Pilha,num_comando); continue; } else if(strcmp(comando,"list")==0) { list(Pilha); printf("\n"); continue; } else if(strcmp(comando,"pop")==0) { pop(&Pilha); continue; } else if(strcmp(comando,"peek")==0) { peek(Pilha); continue; } } while(strcmp(comando,"end")!=0); system("pause"); getch(); }
  5. Eu coloquei o 0 no int num da declaração do main, mesmo assim não funcionou, mas no método que modifica a função list funcionou, agradeço muito! Quebrei bastante a cabeça.
  6. Olá amigo, tentei por o num = 0 na função main como você disse mas ainda assim deu erro. O modo pulando o primeiro nodo, como seria?
  7. Olá, eu tenho que fazer uma lista encadeada que pega dados do usuário utilizando funções como add, list e etc, mas no código que eu fiz, no comando list, a listagem aparece um número totalmente nada a ver à frente dos adicionados, poderiam me ajudar a solucionar? #include<stdio.h> #include<string.h> #include<stdlib.h> struct Lista{ int num; struct Lista *proximo; }; struct Lista * cria(void) { return NULL; } struct Lista * add(struct Lista *l, int num) { struct Lista *novo = (struct Lista*)malloc(sizeof(struct Lista)); novo->num = num; if(l == NULL) { novo->proximo = NULL; return novo; } else { struct Lista *temp = l; while(temp->proximo != NULL) { temp = temp->proximo; } novo->proximo = NULL; temp->proximo = novo; return l; } } void list(struct Lista *l) { struct Lista *p; for(p=l;p!=NULL;p=p->proximo) { printf("%d ", p->num); } } main() { int num; char *cmd; char string_enter[50]; struct Lista *l; l = cria(); l = add(l,num); do { gets(string_enter); cmd = strtok(string_enter," "); num = atoi((char *)strtok(NULL," ")); if(strcmp(cmd,"add")== 0){ add(l,num); continue; } else if(strcmp(cmd,"list")== 0){ list(l); continue; } }while(strcmp(cmd,"end")!= 0); system("pause"); }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...