-
Posts
6 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Vinicius78
-
-
Alguem poderia me mostrar como eu transformo o código abaixo da lista duplamente encadeada em uma lista duplamente encadeada circular?
main.c
#include <stdio.h> #include <stdlib.h> #include "lista.h" void menu(){ lista *l=(lista*)malloc(sizeof(lista)); create_lista(l); int op; //opção recursiva do{ system("cls"); printf("\n lista: "); mostra_lista(l); printf("\n\n"); printf("1 - Inserir inicio lista \n"); printf("2 - Inserir fim lista \n"); printf("3 - Remover inicio Lista \n"); printf("4 - Remover fim Lista \n"); printf("5 - Sair \n"); printf("\n\n Informe a opcao :>_"); scanf("%d",&op); switch(op){ case 1:{ int x; printf("Informe o valor: "); scanf("%d",&x); inserir_ini_lista(l,x); break; } case 2:{ int x; printf("Informe o valor: "); scanf("%d",&x); inserir_fim_lista(l,x); break; } case 3:{ remove_ini_lista(l); break; } case 4:{ remove_fim_lista(l); break; } case 5: op=5; } }while(op != 5); } int main() { menu(); printf("\n\n"); return 0; }
lista.h
#ifndef LISTA_H_INCLUDED #define LISTA_H_INCLUDED typedef struct no{ int dado; struct no *prox; //ponteiro do próximo struct no *ant; //ponteiro do anterior }no; typedef struct lista{ no *inicio; no *fim; }lista; void create_lista(lista *l); int lista_vazia(lista *l); void inserir_ini_lista(lista *l, int valor); void inserir_fim_lista(lista *l, int valor); int remove_ini_lista(lista *l); int remove_fim_lista(lista *l); void mostra_lista(lista *l); #endif // LISTA_H_INCLUDED
lista.c
#include <stdio.h> #include <stdlib.h> #include "lista.h" void create_lista(lista *l){ l->inicio = NULL; l->fim = NULL; } int lista_vazia(lista *l){ if(l->inicio ==NULL){ return 1; }else{ return 0; } } void inserir_ini_lista(lista *l, int valor){ //criar um novo nó no *novo=(no*)malloc(sizeof(no)); novo->dado = valor; novo->prox =NULL; novo->ant =NULL; if(l->fim ==NULL){ //Primeiro no lista l->inicio = novo; l->fim = novo; }else{ l->fim->ant = novo; novo->prox =l->inicio; l->inicio = novo; } novo->ant = l->fim; } void inserir_fim_lista(lista *l, int valor){ //criar novo no no *novo=(no*)malloc(sizeof(no)); novo->dado = valor; novo->prox = NULL; novo->ant = NULL; if(l->inicio == NULL){ //Primeira vez no lista l->inicio = novo; l->fim = novo; }else{ l->fim->prox = novo; novo->ant = l->fim; l->fim = novo; //ajusta o ponteiro fim } l->fim->prox = l->inicio; } int remove_ini_lista(lista *l){ int y; //aux no *aux =(no*)malloc(sizeof(no)); if(lista_vazia(l)==1){ printf("Nao e possivel remover ----"); printf("Lista Vazia!! \n"); free(aux); return 0; }else{ if(l->inicio == l->fim){ //só tenho um no na lista aux=l->inicio; y =aux->dado; l->fim = NULL; l->inicio = NULL; free(aux); }else{ aux=l->inicio; y=aux->dado; l->inicio = l->inicio->prox; //ou l->inicio= aux->prox aux->prox =NULL; l->inicio->ant = l->fim; free(aux); } } return y; } void mostra_lista(lista *l){ if(lista_vazia(l)){ printf("Lista vazia!!!"); }else{ no *aux=(no*)malloc(sizeof(no)); aux=l->inicio; while(aux!=NULL){ printf("| %d",aux->dado); aux=aux->prox; //incrementa o ponteiro } free(aux); } } int remove_fim_lista(lista *l){ no *aux=(no*)malloc(sizeof(no)); //ponteiro auxiliar int y; if(lista_vazia(l)){//se so tem um unico nó aux=l->fim; //aponta para o nó final y =aux->dado; //passa o valor da struc para a variável l->fim=NULL; l->inicio=NULL; free(aux); return y; }else{ aux = l->fim; y=aux->dado; l->fim = aux->ant; //passa o final para o anterior l->fim->prox = l->inicio; //desconect ao final aux->ant =NULL; free(aux); //free último elemento return y; } }
-
@arfneto Muito obrigado eu realmente não tinha prestado atenção, passei para estrutura de dados faz pouco tempo, ainda estou aprendendo, no caso o que poderia substituir pelo conio.h?
-
Pessoal, alguém poderia me ajudar a entender o por que de meu código estar dando esses erros, verifiquei e tenho quase certeza que fechei todos os parênteses.
main.c
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <locale.h> #include "fila.h" int main() { srand(time(NULL));//FUNÇÂO PARA NÂO REPEtIR A FILA setlocale(LC_ALL, "Portuguese");//FUNÇÂO PARA ACEITAR OS CARACTERES DO PORTUGUES int opc=0, e; pilha *p = (pilha*) malloc(sizeof(pilha)); fila *f = (fila*) malloc(sizeof (fila)); creatfila(f);//CRIANDO FILA creatpilha(p);//CrIANDO ILHA //CHAMANDO MENUS DE OPÇÔES while(opc != 3) { system("cls"); mostra(f, p); printf("\n----ESCOLHA A OPÇÂO DESEJADA----"); printf("\n1-ENFILERA"); printf("\n2-EMPILHA"); printf("\n3-FINALIZAR"); scanf("%d",&opc); switch (opc){ case 1:{//ENFILEIRANDO e = rand() % 1000; //DEFININDO UM NUMERO ALEATORIO PARA FILA printf("\n|%d|",e); enfilera(f, e); system("pause"); break; } case 2:{//EMPILHANDO if(f->ini == NULL)//CASO NÂO HAJA NENHUM VALOR NA FIlA { printf("\nPOR VAFOR INSIRA UM VALOR A FILA PARA DEPOIS EMPILHAR"); } else{ e = desenfilera(f); printf("\nO valor |%d| será adicionado a pilha\n",e); system("pause"); empilha(p,e); } break; } case 3:{//ENCERRANDO opc =3; printf("\nENCERRANDO"); break; } } } printf("\n"); return 0; }
fila.h
#ifndef FILA_H_INCLUDED #define FILA_H_INCLUDED //DEFININDO PILHA typedef struct Tpilha{ int item; struct Tpilha *ant; }Tpilha; typedef struct pilha{ Tpilha *topo; }pilha; //DEFININDO FILA typedef struct Tfila{ int dado; struct Tfila *prox; }Tfila; typedef struct fila{ Tfila *ini; Tfila *fim; }fila; //FUNÇÔES PARA LIDAR COM A PILHA void creatpilha(pilha *p); int pilha_vazia(pilha *p); void empilha (pilha *p,int e); //FUNÇÔES PARA LIDAR COM A FILA int fila_vazia(fila *f); void creatfila(fila *f); void enfilera (fila *f, int e); int desenfilera (fila *f); void mostra(fila *f, pilha *p) #endif // FILA_H_INCLUDED
fila.c
#include <stdio.h> #include <stdlib.h> #include "fila.h" //INICIALIZANDO PILHA COM NULL void creatpilha(pilha *p) { p->topo=NULL; } //INICIALIZANDO FILA COM NULL void creatfila(fila *f) { f->ini = NULL; f->fim = NULL; } //VERIFICANDO SE A PILHA ESTÀ VAZIA int pilha_vazia(pilha *p) { if(p->topo == NULL) return 1; else return 0; } //VERIFICANDO SE A FILA ESTÀ VAZIA int fila_vazia(fila *f) { if(f->ini == NULL) return 1; else return 0; } //EMPILHANDO VAOR DA FILA void empilha (pilha *p,int e) { Tpilha *novo = (Tpilha*) malloc(sizeof(Tpilha)); novo->ant = p->topo; novo->item = e; p->topo =novo; } //ENFILEIRANDO VALOR ALEATORIO void enfilera (fila *f, int e) { Tfila *novo = (Tfila*) malloc(sizeof(Tfila)); novo->dado = e; novo->prox = NULL; if(fila_vazia(f) == 1) { f->ini = novo; f->fim= novo; } else{ f->fim->prox = novo; f->fim= novo; } } //DESENFILEIRANDO PARA JOGAR NA PILHA int desenfilera(fila f) { int valor; Tfila *aux = (Tfila*) malloc(sizeof(Tfila)); aux = f->ini; valor = aux->dado; f->ini= aux->prox; aux->prox=NULL; if(f->ini==NULL) { f->fim = NULL; free(aux); } else free(aux); return valor; } //MOSTRANDO A FILA E A PILHA void mostra(fila *f, pilha *p) { //FILA printf("\n"); Tfila *aux = (Tfila*)malloc(sizeof(Tfila)); aux = f->ini; while(aux != NULL) { printf("| %d ",aux->dado); aux=aux->prox; } //PILHA printf("\n"); Tpilha *auxp=(Tpilha*)malloc(sizeof(Tpilha)); auxp=p->topo; while(auxp!=NULL){ printf("%d \n",auxp->item); auxp=auxp->ant; } }
main.c e fila.c estão na pasta sources e o arquivo fila.h esta na pasta headhers
-
@arfneto Muito obrigado pelas dicas o problema foi resolvido, esse é somente um código para responder um trabalho em c, utilizei variáveis menores para economizar tempo, antes de entregar irei fazer os comentários em cada parte do código, a partir de agora quando nomear uma struct utilizarei a primeira letra maiúscula, na linha 47 havia esquecido de colocar o \n, ainda irei corrigir a amostragem do programa na tela só não o fiz ainda porque estava tentando resolver esse problema que alias você foi de grande ajuda tinha esquecido completamente do strcpy.
- 1
-
Pessoal, alguém poderia me ajudar a entender o porque do meu código estar sando pau nas linhas 34,35,37?
Segue o código a baixo
/* 2) Escreva uma função que recebe uma pilha p1 e os dados dos alunos (nome, rua, idade, sexo). Você deve inserir os dados na pilha seguindo os parâmetros da Struct. Lembre-se das aulas de ponteiros e como serão inseridos os dados dentro da pilha. VINICIUS GABRIEL DATA 15/04/2020 */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct aluno{ char nm[40]; char rua[40]; int idade; char sx[10]; }aluno; typedef struct Tpilha{ struct aluno item; struct Tpilha *ant; }Tpilha; typedef struct pilha{ Tpilha *t; }pilha; void creatpilha (pilha *p){ p->t = NULL; } void empilha (pilha *p,aluno e) { Tpilha *novo =(Tpilha*)malloc(sizeof(Tpilha)); novo->item.nm=e.nm; novo->item.rua=e.rua; novo->item.idade=e.idade; novo->item.sx=e.sx; novo->ant=p->t; p->t=novo; } void mostra_pilha(pilha *p){ Tpilha *aux = (Tpilha*)malloc(sizeof(Tpilha)); aux=p->t; while(aux!=NULL){ printf("\nNome: %s",aux->item.nm); printf("\nRua: %s",aux->item.rua); printf("\Idade: %d",aux->item.idade); printf("\nSexo: %s",aux->item.sx); aux=aux->ant; } } int main() { int i=5; pilha *p = (pilha*)malloc(sizeof(pilha)); aluno e; creatpilha(p); while(i!=0) { printf("\nDigite a opção desejada"); printf("\n1-Empilhar"); printf("\n2-Mostrar pilha"); printf("\n3-Sair\n"); scanf("%d", &i); switch(i){ case 1:{ printf("\nDigite o nome: "); fflush(stdin); gets(&e.nm); printf("\nDigite a rua: "); fflush(stdin); gets(&e.rua); printf("%s",e.rua); printf("\nDigite o sexo(F ou M): "); fflush(stdin); gets(&e.sx); printf("\nDigite a idade: "); fflush(stdin); scanf("%d",&e.idade); empilha(p,e); break; } case 2:{ mostra_pilha(p); break; } case 3:{ i =0; break; } } } printf("\n"); return 0; }
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
Arvore Binaria de Busca Procurando ele elementos menores que um valor solicitado
em C/C#/C++
Postado
Bom dia, alguém poderia me dar uma luz de como faço a busca em uma arvores, de valores menores que um determinado numero e somar quantos desses valores tem, por exemplo: A arvores possui os números 5 6 7 10 e o usuário digita 8, a função deve procurar todos os numero menores que 8 e retornar a quantidade deles que nesse caso seria 3. Meu código ae