Ir para conteúdo
Fórum Script Brasil

Pesquisar na Comunidade

Mostrando resultados para as tags ''lista encadeada''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • Programação & Desenvolvimento
    • ASP
    • PHP
    • .NET
    • Java
    • C, C++
    • Delphi, Kylix
    • Lógica de Programação
    • Mobile
    • Visual Basic
    • Outras Linguagens de Programação
  • WEB
    • HTML, XHTML, CSS
    • Ajax, JavaScript, XML, DOM
    • Editores
  • Arte & Design
    • Corel Draw
    • Fireworks
    • Flash & ActionScript
    • Photoshop
    • Outros Programas de Arte e Design
  • Sistemas Operacionais
    • Microsoft Windows
    • GNU/Linux
    • Outros Sistemas Operacionais
  • Softwares, Hardwares e Redes
    • Microsoft Office
    • Softwares Livres
    • Outros Softwares
    • Hardware
    • Redes
  • Banco de Dados
    • Access
    • MySQL
    • PostgreSQL
    • SQL Server
    • Demais Bancos
  • Segurança e Malwares
    • Segurança
    • Remoção De Malwares
  • Empregos
    • Vagas Efetivas
    • Vagas para Estágios
    • Oportunidades para Freelances
  • Negócios & Oportunidades
    • Classificados & Serviços
    • Eventos
  • Geral
    • Avaliações de Trabalhos
    • Links
    • Outros Assuntos
    • Entretenimento
  • Script Brasil
    • Novidades e Anúncios Script Brasil
    • Mercado Livre / Mercado Sócios
    • Sugestões e Críticas
    • Apresentações

Encontrar resultados em...

Encontrar resultados que...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Encontrado 15 registros

  1. Eu estou fazendo um cadastro escolar onde eu crio uma lista duplamente encadeada circular para inserir os alunos, e uma lista simplesmente encadeada para inserir uma disciplina do aluno. Na parte de cadastrar aluno deu tudo certo, mas na hora de inserir a lista de disciplina na lista do aluno selecionado da erro. Quem puder me ajudar eu agradeço. Segue o código: aluno.h #ifndef ALUNO_H_INCLUDED #define ALUNO_H_INCLUDED typedef struct DisciplinasListas { char nome[100]; struct DisciplinasListas * prox; }Disciplina; struct AlunosLista{ char nome[100], dataNascimento[11],matricula[10]; Disciplina * disciplinas; struct AlunosLista * next; struct AlunosLista * prev; }; void cadastrarAluno(); void imprimirLista(); void cadastrarDisciplinas(); struct AlunosLista * buscaAluno(char *); #endif main.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "aluno.h" typedef struct AlunosLista node; node *head = NULL, *tail = NULL; void cadastrarAluno() { node *newNode = (node *) malloc(sizeof(node)); printf("\nForneca a matricula: "); fgets(newNode->matricula,10,stdin); setbuf(stdin,NULL); printf("\nForneca o nome: "); fgets(newNode->nome,100,stdin); setbuf(stdin,NULL); printf("\nForneca a data de nascimento: "); fgets(newNode->dataNascimento,11,stdin); setbuf(stdin,NULL); newNode->disciplinas=NULL; newNode->next = newNode; newNode->prev = newNode; if(head==NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; newNode->next = head; newNode->prev = tail; tail = newNode; head->prev = tail; } } void imprimirLista() { if(head==NULL) return; node *current = head; do { printf("\n%s", current->matricula); Disciplina *currentDisc = current->disciplinas; do { printf("\n%s", currentDisc->nome); currentDisc = currentDisc->prox; } while(currentDisc != current->disciplinas); current = current->next; } while(current != head); } struct AlunosLista * buscaAluno(char matricula[]) { if(head==NULL) return; node *current = head; do { if(!strcmp(current->matricula,matricula)) { return current; current = current->next; } } while(current != head); return 0; } void cadastrarDisciplinas() { char disciplina[100], matricula[10]; if(head==NULL) return; printf("\nForneça a matricula do aluno:"); fgets(matricula,10,stdin); setbuf(stdin,NULL); struct AlunosLista *busca = buscaAluno(matricula); if(busca!=0) { printf("\nForneça o nome da disciplina:"); fgets(disciplina,100,stdin); setbuf(stdin,NULL); node *current = head; do { if(current==busca) { if (!strcmp(current->matricula,matricula)) { Disciplina * lDisciplina = (Disciplina *)malloc(sizeof(Disciplina)); strcpy(lDisciplina->nome,disciplina); lDisciplina->prox = current->disciplinas; current->disciplinas->prox = lDisciplina; break; } } current = current->next; } while(current != head); } else printf("\nAluno inexistente!!!"); } int main(){ int opcao; do{ printf("\n1-cadastrar aluno"); printf("\n2-cadastrar disciplinas do aluno"); printf("\n3-listar"); printf("\n4-sair"); printf("\nForneca a sua opcao: "); scanf("%d",&opcao); setbuf(stdin,NULL); switch(opcao){ case 1: cadastrarAluno(); break; case 2: cadastrarDisciplinas(); break; case 3: imprimirLista(); break; } }while(opcao!=4); return 0; }
  2. To com um problema em fazer um programa, ele recebe um arquivo .txt onde possui varios dados de varios tipos, como semestre (float), numero do trabalho (int), ano (int), titulo (char), descricao (char), de alguns trabalhos, há valor indeterminado de trabalhos no arquivo de texto, tenho q ler o arquivo, armazenar numa lista, ordenar em ordem crescente a partir do ano, semestre e o numero do trabalho, excluir duplicidades, inserir um novo trabalho e imprimir de formar ordenada no arquivo de saida .txt. não sei por onde começar...
  3. To com um problema em fazer um programa, ele recebe um arquivo .txt onde possui varios dados de varios tipos, como semestre (float), numero do trabalho (int), ano (int), titulo (char), descricao (char), de alguns trabalhos, há valor indeterminado de trabalhos no arquivo de texto, tenho q ler o arquivo, armazenar numa lista, ordenar em ordem crescente a partir do ano, semestre e o numero do trabalho, excluir duplicidades, inserir um novo trabalho e imprimir de formar ordenada no arquivo de saida .txt. não sei por onde começar...
  4. Considera a seguinte estrutura typedef struct lista{ int idade; char nome[40]; char sexo; struct lista *prox; }LISTA; 1. Seja uma lista encadeada que armazena nomes e idades dos alunos. (A lista já existe, porem não se sabe o seu tamanho). Implemente uma funçao que devolva uma lista encadeada contendo os nomes e idades apenas das alunas(FEMININO).
  5. Olá! Estou fazendo um trabalho da faculdade e tenho que implementar grafos por lista de adjacencia. Tenho um método que verifica se existe uma aresta entre dois vertices, porém está dando erro de compilacao, segue o código abaixo: Structs: typedef struct taresta { int vdest; TipoPeso peso; struct taresta * prox; } TipoAresta; typedef TipoAresta* TipoApontador; typedef struct { TipoApontador *listaAdj; int numVertices; int numArestas; } TipoGrafo; Método: bool existeAresta(int v1, int v2, TipoGrafo *grafo){ TipoApontador *p; p = (TipoApontador*)malloc(sizeof(TipoApontador)); *p = grafo->listaAdj[v1]; //começa a percorrer do inicio da lista de adjacencia de v1 while(p){ if (p->vdest == v2){ //linha que esta dando erro return true; } p = p->prox; //linha que esta dando erro } free(p); return false; } Os erros de compilação que ocorrem são os mesmos: Request for member 'vdest' in '*p', which is of pointer type 'TipoApontador' {aka taresta} (maybe you meant to use '->' ?) Request for member 'prox' in '*p', which is of pointer type 'TipoApontador' {aka taresta} (maybe you meant to use '->' ?) Espero que alguém de ajude a enxergar o erro. Obrigada desde já!!!
  6. Olá! Estou fazendo um trabalho da faculdade e tenho que implementar grafos por lista de adjacencia. Tenho um método que verifica se existe uma aresta entre dois vertices, porém está dando erro de compilacao, segue o código abaixo: bool existeAresta(int v1, int v2, TipoGrafo *grafo){ TipoApontador *p; p = (TipoApontador*)malloc(sizeof(TipoApontador)); *p = grafo->listaAdj[v1]; while(p){ if (p->vdest == v2){ //linha que esta dando erro return true; } p = p->prox; } free(p); return false; }
  7. Criei uma lista encadeada onde tenho 3 strcuts para cadastrar pessoa, O bug que acontece é que apos eu inserir o primeiro cadastro os telefones continuam acumulado no primeiro registro, emails também, olhe como está na imagem anexada. struct agenda { char matricula[20]; char nome[30]; struct agenda *prox; struct tel *t; struct mail *m; }; struct tel{ char telefone[20]; struct tel *prox; }; struct mail{ char email[30]; struct mail *prox; }; Eu uso essas tres structs por que por exemplo uma pessoa pode ter mais de um telefone ou mais de um email. Minhas funções de inserir: void insereTel(struct tel **t,char tel[]){ struct tel *p,*q; p=(struct tel*)malloc(sizeof(struct tel)); strcpy(p->telefone,tel); p->prox=*t; *t=p; } void insereMail(struct mail **m,char mail[]){ struct mail *p; p=(struct mail*)malloc(sizeof(struct mail)); strcpy(p->email,mail); p->prox=*m; *m=p; } void inserePessoa (struct agenda **L, struct tel *T,struct mail *M, char n[], char end[]){ struct agenda *p; p=(struct agenda*)malloc(sizeof(struct agenda)); strcpy(p->matricula,n); strcpy(p->nome,end); p->prox=*L; p->t=T; p->m=M; *L=p; } Eu também mando os dados pelo menu quando ele seleciona a opção para fazer o registro: main(){ struct agenda *Lista; struct tel *Tel; struct mail *Mail; int op; char matricula[20], nome[30], telefone[20], email[20]; char no; Lista=criaAgenda(); Tel=criaTel(); Mail=criaMail(); do{ system("cls"); printf("\n\n"); printf("\n[1] - Cadastra Aluno --Falta arrumar bug dos tel"); printf("\n[2] - Pesquisa Aluno (Matricula)"); printf("\n[3] - Remove Aluno"); printf("\n[4] - Total de alunos"); printf("\n[5] - Total de telefones"); printf("\n[6] - Limpar Lista"); printf("\n[7] - Salva em Disco"); printf("\n[8] - Carrega lista"); printf("\n\nDigite -> "); fflush(stdin); scanf("%d",&op); switch (op){ case 1: printf("\nMatricula -> "); fflush(stdin); scanf("%s",matricula); printf("\nNome -> "); fflush(stdin); scanf("%s",nome); do{ printf("\nTelefone -> "); fflush(stdin); scanf("%s",telefone); insereTel(&Tel,telefone); printf("\nPossui mais telefones -> [1] Sim [2] não\n"); scanf("%d",&op); }while(op!=2); do{ printf("\nEmail -> "); fflush(stdin); scanf("%s", email); insereMail(&Mail,email); printf("\nPossui mais emails? [1] Sim [2] não\n"); scanf("%d",&op); }while(op!=2); inserePessoa(&Lista,Tel,Mail,matricula,nome); break; Aqui está o código completo do projeto: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> struct agenda { char matricula[20]; char nome[30]; struct agenda *prox; struct tel *t; struct mail *m; }; struct tel{ char telefone[20]; struct tel *prox; }; struct mail{ char email[30]; struct mail *prox; }; struct agenda* criaAgenda (){ return NULL; } struct tel* criaTel(){ return NULL; } struct mail*criaMail(){ return NULL; } void insereTel(struct tel **t,char tel[]){ struct tel *p,*q; p=(struct tel*)malloc(sizeof(struct tel)); strcpy(p->telefone,tel); p->prox=*t; *t=p; } void insereMail(struct mail **m,char mail[]){ struct mail *p; p=(struct mail*)malloc(sizeof(struct mail)); strcpy(p->email,mail); p->prox=*m; *m=p; } void inserePessoa (struct agenda **L, struct tel *T,struct mail *M, char n[], char end[]){ struct agenda *p; p=(struct agenda*)malloc(sizeof(struct agenda)); strcpy(p->matricula,n); strcpy(p->nome,end); p->prox=*L; p->t=T; p->m=M; *L=p; } struct agenda* localiza(struct agenda *L,char n[]){ struct agenda *p; struct tel *auxt; struct mail *auxm; int cont=0; p=L; auxt=p->t; auxm=p->m; while(p!=NULL){ if (strcmp(p->matricula,n)!=0) p=p->prox; else{ printf("\n\n Matricula -> %s",p->matricula); printf("\n Nome -> %s",p->nome); while(auxt!=NULL){ printf("\n Telefone -> %s",auxt->telefone); auxt =auxt->prox; } while (auxm!=NULL){ printf("\n Email -> %s",auxm->email); auxm=auxm->prox; } return p; } } return NULL; } void listarTodos(struct agenda *L){ struct agenda *p; struct tel *auxt; struct mail *auxm; p=L; auxt=p->t; auxm=p->m; while (p!=NULL){ printf("\n\nmatricula -> %s",p->matricula); printf("\n\nnome -> %s",p->nome); while(auxt!=NULL){ printf("\n\nTelefone -> %s",auxt->telefone); auxt =auxt->prox; } while (auxm!=NULL){ printf("\n\nEmail -> %s",auxm->email); auxm=auxm->prox; } p=p->prox; printf("\n\n=================\n\n"); } } void TotalTelefones(struct agenda *L){ struct agenda *p; struct tel *auxt; struct mail *auxm; int contador; p=L; auxt=p->t; auxm=p->m; while(auxt!=NULL){ contador ++; auxt =auxt->prox; } printf("\nTotal de telefones: %d", contador); } void TotalAlunos(struct agenda *L){ struct agenda *p; struct tel *auxt; struct mail *auxm; int contador; p=L; auxt=p->t; auxm=p->m; while (p!=NULL){ contador ++; p=p->prox; //printf("\n\n=================\n\n"); } printf("\nTotal de alunos: %d", contador); } void SalvarTXT(struct agenda *L){ struct agenda *p; struct tel *auxt; struct mail *auxm; p=L; auxt=p->t; auxm=p->m; FILE *arquivo_texto; //Criando a File arquivo_texto = fopen ("agenda_eletronica.txt", "w+"); //Abrindo txt e escrevendo nele if (arquivo_texto == NULL) { printf("Erro ao abrir o arquivo.\n"); //Caso de algum erro exit(1); } while (p!=NULL){ //Correr toda lista das structs fprintf(arquivo_texto, "Matricula -> %s\n Nome -> %s\n", p->matricula, p->nome); //Inserindo dados da Struct de dados while(auxt!=NULL){ fprintf(arquivo_texto, "Telefone -> %s\n", auxt->telefone); //Inserindo dados da Struct de telefones auxt =auxt->prox; //Pula pro proximo registro } while (auxm!=NULL){ fprintf(arquivo_texto, "Email -> %s\n", auxm->email); //Inserindo dados da Struct de email auxm=auxm->prox; //Pula pro proximo registro } p=p->prox; fprintf(arquivo_texto, "=================\n"); //printf("\n\n=================\n\n"); } fclose(arquivo_texto); //fecha o arquivo } void listaLetra(struct agenda *L,char n){ struct agenda *p; struct tel *auxt; struct mail *auxm; p=L; auxt=p->t; auxm=p->m; while (p!=NULL){ if(p->matricula[0]!=n) p=p->prox; else{ printf("\n\nmatricula -> %s",p->matricula); printf("\n\nnome -> %s",p->nome); while(auxt!=NULL){ printf("\n\nTelefone -> %s",auxt->telefone); auxt=auxt->prox; } while (auxm!=NULL){ printf("\n\nEmail -> %s",auxm->email); auxm=auxm->prox; } p=p->prox; printf("\n\n======================\n\n"); } } } void alterarDados(struct agenda *L,char n[]){ int cont=0; struct agenda *p; struct tel *auxt; struct mail *auxm; auxt=p->t; auxm=p->m; p=localiza(L,n); if(p==NULL) printf("\nmatricula não encontrado"); else{ printf("\n\nDigite o novo nome:"); scanf("%s",&p->nome); while (auxt!=NULL){ printf("\n\n Digite o novo telefone:"); scanf("%s",&auxt->telefone); auxt=auxt->prox; } while (auxm!=NULL){ printf("\n\n Digite o novo email:"); scanf("%s",&auxm->email); auxm=auxm->prox; } } } struct agenda* removermatricula(struct agenda *L,char n[]){ struct agenda *p, *q; p=localiza(L,n); if (p==NULL) printf("\n\n Matricula não encontrada !"); else{ q=L; if(q==p){ L=p->prox; free(p); }else{ while (q->prox!=p) q=q->prox; q->prox=p->prox; free(p); } printf("\n\n Aluno removido com sucesso !"); } return L; } void LimpaLista(struct agenda *L){ struct agenda *p, *q; p=L; q=L; if (p==NULL) printf("\n\n Lista vazia"); else{ q=L; if(q==p){ L=p->prox; free(p); }else{ while (q->prox!=p) q=q->prox; q->prox=p->prox; free(p); } printf("\n\n Lista limpa !"); } //return L; } main(){ struct agenda *Lista; struct tel *Tel; struct mail *Mail; int op; char matricula[20], nome[30], telefone[20], email[20]; char no; Lista=criaAgenda(); Tel=criaTel(); Mail=criaMail(); do{ system("cls"); printf("\nEstrutura de Dados - Trabalho Pratico I - Gabriel de Souza\n"); printf("\n[1] - Cadastra Aluno --Falta arrumar bug dos tel"); printf("\n[2] - Pesquisa Aluno (Matricula)"); printf("\n[3] - Remove Aluno"); printf("\n[4] - Total de alunos"); printf("\n[5] - Total de telefones"); printf("\n[6] - Limpar Lista"); printf("\n[7] - Salva em Disco"); printf("\n[8] - Carrega lista"); printf("\n\nDigite -> "); fflush(stdin); scanf("%d",&op); switch (op){ case 1: printf("\nMatricula -> "); fflush(stdin); scanf("%s",matricula); printf("\nNome -> "); fflush(stdin); scanf("%s",nome); do{ printf("\nTelefone -> "); fflush(stdin); scanf("%s",telefone); insereTel(&Tel,telefone); printf("\nPossui mais telefones -> [1] Sim [2] não\n"); scanf("%d",&op); }while(op!=2); do{ printf("\nEmail -> "); fflush(stdin); scanf("%s", email); insereMail(&Mail,email); printf("\nPossui mais emails? [1] Sim [2] não\n"); scanf("%d",&op); }while(op!=2); inserePessoa(&Lista,Tel,Mail,matricula,nome); break; case 2: if(Lista==NULL) printf("\nAgenda vazia"); else{ printf("\n Digite um matricula -> "); fflush(stdin); scanf("%s",matricula); if(localiza(Lista,matricula)==NULL) printf("\n Matricula não encontrado na agenda"); } getch(); break; case 3: if(Lista==NULL) printf("\nAgenda vazia"); else{ printf("\nDigite a matricula do aluno que deseja remover -> "); scanf("%s",matricula); Lista=removermatricula(Lista,matricula); getch(); } case 4: if(Lista==NULL) printf("\nAgenda vazia"); else TotalAlunos(Lista); getch(); break; case 5: if(Lista==NULL) printf("\nAgenda vazia"); else TotalTelefones(Lista); getch(); break; case 6: if(Lista==NULL) printf("\nAgenda vazia"); else LimpaLista(Lista); getch(); break; case 7: if(Lista==NULL) printf("\nAgenda vazia"); else SalvarTXT(Lista); getch(); break; case 8: if(Lista==NULL) printf("\nAgenda vazia"); else listarTodos(Lista); getch(); break; } }while (op!=0); }
  8. Oi Pessoal, estou com um problema em uma implementação de lista encadeada usando template. Quando crio uma lista e manipulo ela, não dá nenhum problema, mas quando coloco lista como um atributo de uma outra classe, não consigo manipular ela. Também quando tento atribuir a lista pra outro objeto, o programa para inesperadamente. Seguem os códigos: ListaEncadeada.h (A implementação da lista usando template). #ifndef LISTAENCADEADA #define LISTAENCADEADA template<class T> class ListaEncadeada{ private: //Classe amiga No class No{ friend class ListaEncadeada<T>; private: T *_item; No *_proximo; No(){ _item = 0; _proximo = 0; } ~No(){ if(_item != 0) delete _item; } }; //===================================== //Atributos No *_primeiro; No *_ultimo; No *_pos; int _tamanho; //===================================== public: //Construtores e Destrutores ListaEncadeada(); ListaEncadeada(const ListaEncadeada<T> &lista); ~ListaEncadeada(); //===================================== //Assinatura dos Metodos void insere(T &chave); bool retira(T &chave); T* primeiro(); T* proximo(); bool vazia(); bool pesquisa(T &chave); T* pesquisa(int index); int getTamanho(); //===================================== //Sobrecarga do operador de atribuicao ListaEncadeada<T> &operator=(ListaEncadeada byValList); }; #endif // LISTAENCADEADA /* IMPLEMENTACAO */ using namespace std; /* Descricao: Construtor da classe. Pre-Condicao: Nenhuma. Pos-Condicao: Inicializacao dos elementos da lista. */ template<class T> ListaEncadeada<T>::ListaEncadeada(){ this->_primeiro = new No(); this->_pos = this->_primeiro; this->_ultimo = this->_primeiro; this->_primeiro->_proximo = 0; this->_tamanho = 0; } template<class T> ListaEncadeada<T>::ListaEncadeada(const ListaEncadeada<T> &lista){ this->_primeiro = new No(); this->_pos = this->_primeiro; this->_ultimo = this->_primeiro; this->_primeiro->_proximo = 0; this->_tamanho = 0; No* current = lista._primeiro; while (current != NULL) { this->insere(*current->_item); current = current->_proximo; } } /* Descricao: Destrutor da classe Lista. Pre-Condicao: Lista criada. Pos-Condicao: Lista destruida. */ template<class T> ListaEncadeada<T>::~ListaEncadeada(){ No *aux = this->_primeiro; while(aux != 0){ this->_primeiro = this->_primeiro->_proximo; delete aux; aux = this->_primeiro; } } /* Descricao: Insere um elemento na lista. Pre-Condicao: Lista criada. Pos-Condicao: Elemento inserido no comeco da lista. */ template<class T> void ListaEncadeada<T>::insere(T &chave){ this->_ultimo->_proximo = new No(); this->_ultimo = this->_ultimo->_proximo; this->_ultimo->_item = new T(chave); this->_ultimo->_proximo = 0; this->_tamanho++; } /* Descricao: Retirar elemento da lista. Retorna verdade se o elemento foi retirado com exito. Pre-Condicao: Lista criada. Pos-Condicao: Caso o elemento exista, ele eh removido da lista, caso nao exista, a lista ficara intacta */ template<class T> bool ListaEncadeada<T>::retira(T &chave){ if(this->vazia()){ return false; }else{ No *aux = this->_primeiro; while((aux->_proximo != 0) && (*(aux->_proximo->_item) != chave)){ aux = aux->_proximo; } if(aux->_proximo == 0) return false; No *q = aux->_proximo; //T *item = q->_item; aux->_proximo = q->_proximo; q->_item = 0; if(aux->_proximo == 0) this->_ultimo = aux; delete q; this->_tamanho--; return true; } } /* Descricao: Metodo para retornar o primeiro elemento da lista Pre-Condicao: Lista criada. Pos-Condicao: Lista intacta. */ template<class T> T* ListaEncadeada<T>::primeiro(){ this->_pos = this->_primeiro; return this->proximo(); } /* Descricao: Metodo que retorna o proximo do elemento da posicao atual. Pre-Condicao: Lista criada. Pos-Condicao: Elemento "pos" da lista anda uma posicao. */ template<class T> T* ListaEncadeada<T>::proximo(){ this->_pos = this->_pos->_proximo; if(this->_pos == NULL) return NULL; else return this->_pos->_item; } /* Descricao: Retorna verdade caso lista esteja vazia. Pre-Condicao: Lista iniciada. Pos-Condicao: Lista intacta. */ template<class T> bool ListaEncadeada<T>::vazia(){ return (this->_primeiro == this->_ultimo); } /* Descricao: Metodo que pesquisa a ocorrencia de um elemento na lista. Caso o elemento exista, o metodo retorna true, se nao, false. Pre-Condicao: Lista iniciada. Pos-Condicao: Lista intacta. */ template<class T> bool ListaEncadeada<T>::pesquisa(T &chave){ if(this->vazia()) return false; No *aux = this->_primeiro; while(aux->_proximo != 0){ if(*(aux->_proximo->_item) == chave){ return true; } aux = aux->_proximo; } return false; } /* Descricao: Metodo retorna o elemento do indice de entrada. Pre-Condicao: Lista inicializada. Pos-Condicao: Lista intacta. */ template<class T> T* ListaEncadeada<T>::pesquisa(int index){ if(this->vazia()) return 0; if(index > this->_tamanho) return 0; No *aux = this->_primeiro; int i = 0; while(aux->_proximo != 0){ if(i == index){ return aux->_proximo->_item; } aux = aux->_proximo; i++; } return 0; } /* Descricao: Metodo retorna o tamanho da lista. Pre-Condicao: Lista inicializada Pos-Condicao: Lista intacta. */ template <class T> int ListaEncadeada<T>::getTamanho(){ return this->_tamanho; } template<class T> ListaEncadeada<T>& ListaEncadeada<T>::operator=(ListaEncadeada byValList) { std::swap(this->_primeiro, byValList._primeiro); return *this; } Esses arquivos a seguir são os que eu usei pra testar. Segue as implementações de outras classes: Autor.h #ifndef AUTOR_H #define AUTOR_H #ifndef AUTOR_H #define AUTOR_H #include <string> using namespace std; class Autor { private: string _nome; public: Autor(); //Construtor da classe Autor Autor(Autor &autor); //Construtor da classe Autor ~Autor(); //Metodo que retorna o nome do Autor string getNome(); //Metodo que seta o nome do autor void setNome(string nome); //Metodo que sobrecarrega o operador de igualdade // Quando o nome do autor de entrada é o mesmo que o nome do autor // desta classe, então retorna verdade bool operator==(Autor autor); //Metodo que sobrecarrega o operador de desigualdade // Quando o nome do autor de entrada é diferente que o nome do autor // desta classe, então retorna verdade bool operator!=(Autor autor); }; #endif // AUTOR_H Autor.cpp #include "autor.h" //Construtor da classe Autor Autor::Autor() {} //Construtor da classe Autor Autor::Autor(Autor &autor) { this->_nome = autor.getNome(); } //Destrutor da classe Autor Autor::~Autor() {} //Retorna o nome do Autor string Autor::getNome(){ return this->_nome; } //Seta um nome para Autor void Autor::setNome(string nome){ this->_nome = nome; } //Sobrecarga do operador de igualdade bool Autor::operator==(Autor autor){ return (this->_nome == autor.getNome()); } //SObrecarga do operador de desigualdade bool Autor::operator!=(Autor autor){ return (this->_nome != autor.getNome()); } Main.cpp #include <iostream> #include "listaencadeada.h" #include "autor.h" using namespace std; int main() { ListaEncadeada<Autor> autores; Autor a1; a1.setNome("Autor1"); autores.insere(a1); //l1.addAutor(a1); a1.setNome("Autor2"); autores.insere(a1); //l1.addAutor(a1); a1.setNome("Autor3"); autores.insere(a1); //l1.addAutor(a1); a1.setNome("Autor4"); autores.insere(a1); //l1.addAutor(a1); cout << "Autores:" << endl; for(int i = 0; i < autores.getTamanho(); i++){ cout << autores.pesquisa(i)->getNome() << endl; } ListaEncadeada<Autor> autoresAux(autores); //autoresAux = autores; cout << "Autores Aux:" << endl; for(int i = 0; i < autoresAux.getTamanho(); i++){ cout << autoresAux.pesquisa(i)->getNome() << endl; } return 0; } Desde já, obrigado pela atenção. Abraços.
  9. Bom dia pessoa ! Sou novo no fórum, acabei de me registrar e gostaria de pedir uma ajuda a vocês, pesquisei no fórum e não encontrei. Preciso inserir valores em uma lista encadeada, mas está dando erro quando chega nas matrizes. O Código é um pouco grande, mas nem está terminado, buguei nessa parte e não encontro o erro. O erro acontece no procedimento inserir fim. #include<stdio.h> #include<stdlib.h> #include<string.h> struct cadastro { //Dados cadastrais do colega char nome[50]; char endereco[100]; char cidade[50]; char estado[30]; char idade[10]; char tresidencial[12]; char tcelular[12]; char email[30]; //Dados cadastrais do filho int qtdfilhos; char fnome[10][50]; char fnacionalidade[10][15]; char fidade[10][10]; char fsexo[10][15]; struct cadastro *prox; }; typedef struct cadastro cad; void inserirFim(cad **paramcad, char parnome[], char parendereco[], char parcidade[], char parestado[], char paridade[], char partresidencial[], char partcelular[], char paremail[], int parqtdfilhos, char parfnome[][50], char parfnacionalidade[], char parfidade[], char parfsexo[]) { cad *ncad;//criando ponteiro nova lista. ncad=(cad*)malloc(sizeof(cad));//alocando o espaço em memória strcpy(ncad->nome, parnome); strcpy(ncad->endereco, parendereco); strcpy(ncad->cidade, parcidade); strcpy(ncad->estado, parestado); strcpy(ncad->idade, paridade); strcpy(ncad->tresidencial, partresidencial); strcpy(ncad->tcelular, partcelular); strcpy(ncad->email, paremail); ncad->qtdfilhos = parqtdfilhos; strcpy(ncad->fnome, parfnome); strcpy(ncad->fnacionalidade, parfnacionalidade); strcpy(ncad->fidade, parfidade); strcpy(ncad->fsexo, parfsexo); ncad->proximo = NULL; if(*paramcad == NULL) { *paramcad = ncad;//se for insere a nova lista no final } else { cad *cadaux; cadaux = *paramcad; //coloca a lista atual na lista auxiliar while(cadaux->proximo != NULL) { //e vai percorrendo a lista ate encontrar o final ou seja NULL cadaux = cadaux->proximo; //enquato não acha o final ela fica colocando "as estruturas listas" na lista temporaria }//obviamente uma ora ela vai chegar no final da lista ou seja nesta linha cadaux->proximo = ncad;//como ele já esta no final da fila ele so adiciona a nova lista } } void recebe(cad **paramcad) { int x; printf("\nEste colega possui filho(s)?\n1 - Sim\n2 - não\n"); scanf("%d", &x); if(x==1) { fflush(stdin); char nome[50]; char endereco[100]; char cidade[50]; char estado[30]; char idade[10]; char tresidencial[12]; char tcelular[12]; char email[30]; //Recebe os dados cadastrais do colega printf("\nDigite o nome: "); gets(nome); // inserirFim(&cadastro,tmp); printf("Digite o endereco: "); gets(endereco); printf("Digite a cidade: "); gets(cidade); printf("Digite o estado: "); gets(estado); printf("Digite a idade: "); gets(idade); printf("Digite o telefone residencial: "); gets(tresidencial); printf("Digite o telefone celular: "); gets(tcelular); printf("Digite o email: "); gets(email); system("cls"); int qtdfilhos; char fnome[10][50]; char fnacionalidade[10][15]; char fidade[10][10]; char fsexo[10][15]; system("cls"); printf("\nDigite a quantidade de filhos: "); gets(qtdfilhos); fflush(stdin); int f; f=qtdfilhos; while(y != f) { printf("\nDigite os dados cadastrais do(s) filho(s)\n\n"); printf("Digite o nome do %d filho: ", y+1); gets(fnome[y]); fflush(stdin); printf("Digite a nacionalidade: "); gets(fnacionalidade[y]); fflush(stdin); printf("Digite a idade: "); gets(fidade[y]); fflush(stdin); printf("Digite o sexo: "); gets(fsexo[y]); fflush(stdin); system("cls"); y++; } inserirFim(paramcad,nome, endereco,cidade, etado, idade, tresidencial, tcellar, email, qtdfilhos, fnome, fnacionalidade, fidade, fsexo); } if(x==2) { fflush(stdin); char nome[50]; char endereco[100]; char cidade[50]; char estado[30]; char idade[10]; char tresidencial[12]; char tcelular[12]; char email[30]; //Recebe os dados cadastrais do colega printf("\nDigite o nome: "); gets(nome); // inserirFim(&cadastro,tmp); printf("Digite o endereco: "); gets(endereco); printf("Digite a cidade: "); gets(cidade); printf("Digite o estado: "); gets(estado); printf("Digite a idade: "); gets(idade); printf("Digite o telefone residencial: "); gets(tresidencial); printf("Digite o telefone celular: "); gets(tcelular); printf("Digite o email: "); gets(email); system("cls"); cidade cidade cidade inserirFim(paramcad,nome, endereco,cidade, etado, idade, tresidencial, tcellar, email); } if(x!= 1 && x!= 2) { printf("Opcao invalida!\n Escola uma opcao entre 1 e 2"); } } main() { int op=0; int subop=0; cad *cadastro; cadastro=NULL; while(op!=6) { system("cls"); printf("\nMenu Principal\n"); printf("\n1 - Cadastrar um novo colega e/ou filho\n2 - Mostrar os colegas cadastrados\n3 - Excluir um colega e/ou filho\n4 - Localizar os dados de um colega\n5 - Salvar as informacoes em arquivo\n6 - Sair\n"); printf("\n"); scanf("%d",&op); switch (op) { case 1: system("cls"); printf("\nMenu de Cadastramento\n\n1 - Cadastrar um colega\n2 - Cadastrar um filho\n\n"); scanf("%d", & subop); system("cls"); printf("\n"); if(subop==1) { printf("\n"); system("cls"); printf("Preencha os dados cadastrais para seu colega:\n"); recebe(&cadastro); } if (subop==2) { printf("\n"); printf("Preencha os dados cadastrais para seu filhos:\n"); system("pause>>null");//será removido quando todo o programa estiver concluido } if(subop != 1 && subop!=2) { printf("\n"); printf("Opcao invalida\nSelecione 1 ou 2"); system("pause>>null");//será removido quando todo o programa estiver concluido } break; case 2: system("cls"); break; case 3: printf("Menu de Exclusao\n1 - Exlcuir um colega\n2 - Excluir um filho"); scanf("%d", & subop); printf("\n"); if(subop==1) { } if (subop==2) { } if(subop != 1 && subop!=2) { } break; case 4: break; case 5: break; case 6: op=6; break; default: printf("\nOpcao invalida!\nSelecione uma opcao de 1 a 6"); system("pause>>null"); } } }
  10. Sou inciante e estou treinando alguns conceitos básicos na faculdade sobre listas encadeadas com ponteiros. Estou implementando uma lista onde quero fazer cadastro de moradores de um condomínio, onde serão cadastrados o nome e se possuem veículos dentro do apartamento. Porém na hora que chamo a função imprimir(), simplesmente não acontece nada, embora eu ache que a lógica esteja certa. Alguém pode me ajudar ? Segue o código: #include <iostream> #include <stdlib.h> #include <string> using namespace std; struct Morador { string nome; string veiculo; string placa; string condominio; Morador *proximo; }; struct ListaMoradres { Morador *primeiro; }; ListaMoradres lista; // CRIEI UMA LISTA GLOBAL, POIS QUERO QUE A LISTA CONTINUE COM OS CADASTROS MESMO APÓS O FIM DA EXECUÇÃO // DO MAIN (não SEI SE TA CERTO FAZER ISSO KKK) void inciar() { lista.primeiro = nullptr; } void inserir_Morador() { string nome = ""; string veiculo = ""; string placa = ""; string condominio = ""; int op; cout << "Digite o nome do morador\n"; cin >> nome; cout << "\nPossui veiculo?\n1-SIM\t2-não\n"; cin >> op; switch (op) { case 1: cout << "Carro ou Moto? 1- CARRO\t2- MOTO\n"; cin >> op; if (op == 1) { cout << "Digite placa:\n"; cin >> placa; veiculo = "(Carro)"; break; } else { cout << "Digite placa\n"; cin >> placa; veiculo = "Moto"; break; } case 2: veiculo = "não possui"; break; default: cout << "Opcao invalida\n"; break; } } if (lista.primeiro == nullptr) { Morador *primeiro_Morador = new Morador(); lista.primeiro = primeiro_Morador; primeiro_Morador->nome = nome; primeiro_Morador->veiculo = veiculo; primeiro_Morador->placa = placa; primeiro_Morador->condominio; primeiro_Morador->proximo = nullptr; cout << "Primeiro morador inserido com sucesso\n"; return; } else { Morador *ultimo = lista.primeiro; while (ultimo->proximo != nullptr) ultimo = ultimo->proximo; Morador *novo = new Morador(); ultimo->proximo = novo; novo->nome = nome; novo->veiculo = veiculo; novo->placa = placa; novo->condominio = condominio; novo->proximo = nullptr; cout << "Morador inserido com sucesso\n"; return; } } void imprimir() { Morador *inicio = lista.primeiro; while (inicio->proximo != nullptr) { cout << "\nNome: "+inicio->nome << endl; cout << "Veiculo: " + inicio->veiculo << endl; cout << "Placa: " + inicio->placa << endl; cout << "Condominio: " + inicio->condominio << endl; inicio = inicio->proximo; } return; } int main() { int op; cout << "1 - inciazlizar\t2 - inserir\t3 - imprimir\n"; cin >> op; switch (op) { case 1: inciar(); break; case 2: inserir_Morador(); break; case 3: imprimir(); break; default: cout << "Opcao invalida\n"; break; } main(); }
  11. *Linguagem C* [bUBBLE SORT] Por favor, meu professor passou uma lista de exercícios e não faço ideia de como fazer essa questão. Q1. Suponha dois vetores, um de registros de estudantes e outro de registros de funcionários. Cada registro de estudante contém membros para um último nome, um primeiro nome e um índice de pontos de graduação. Cada registro de funcionário contém membros para um último nome, um primeiro nome e um salário. Ambos os vetores são classificados em ordem alfabética pelo último e pelo primeiro nome. Dois registros com o último e o primeiro nome iguais não aparecem no mesmo vetor. Escreva uma função em C para conceder uma aumento de 10% a todo funcionário que tenha um registro de estudante cujo índice de pontos de graduação seja maior que 3.0. Obs.: As implementações de filas e pilhas devem ser realizadas utilizando listas encadeadas. Se alguém puder ajudar a começar serei muito grato.
  12. Bom dia. pessoal... Tou com um pequeno problema. É o seguinte. Implementei um algoritmo que cria uma árvore alv (até aqui beleza), mas que em cada nó seja armazenada uma palavra e que quando insiro uma palavra que tenha a mesma primeira letra da que esta no nó, é criada uma lista encadeada. Mas o negócio ta aí. Quando insiro mais de duas palavras que tenham a mesma primeira letra, só imprime as duas ultimas palavras, parece que fica perdido a primeira palavra. E se eu inserir mais, só imprime as duas últimas. Vou colocar só a função de inserir. Se puderem me ajudar agradeceria muito. void inserir(struct avl **pRaiz,struct avl **PAI, char info[]){ struct avl *atual; struct avl *novo; //struct avl *anterior; if(*pRaiz == NULL){ *pRaiz = (struct avl *) malloc(sizeof(struct avl )); (*pRaiz)->prox = NULL; (*pRaiz)->esq = NULL; (*pRaiz)->dir = NULL; strcpy((*pRaiz)->info,info); (*pRaiz)->chave = info[0]; (*pRaiz)->pai=(*PAI); (*pRaiz)->bal=0; return; } else{ if(info[0] <(*pRaiz)->chave){ inserir(& (*pRaiz)->esq,& (*pRaiz), info); (*pRaiz)->bal=avl_height ( (*pRaiz)->dir ) - avl_height ( (*pRaiz)->esq ); if( (*pRaiz)->bal==-2){ if( (*pRaiz)->esq->bal==-1) (*pRaiz)= rotacaoLL ( (*pRaiz) ); else if( (*pRaiz)->esq->bal==1){ (*pRaiz)->esq =rotacaoRR ( (*pRaiz)->esq ); (*pRaiz)= rotacaoLL ( (*pRaiz) ); } } } else{ if(info[0] >(*pRaiz)->chave){ inserir(& (*pRaiz)->dir,& (*pRaiz), info); (*pRaiz)->bal=avl_height ( (*pRaiz)->dir ) - avl_height ( (*pRaiz)->esq ); if( (*pRaiz)->bal==2){ if( (*pRaiz)->dir->bal==1) (*pRaiz)= rotacaoRR ( (*pRaiz) ); else if( (*pRaiz)->dir->bal==-1){ (*pRaiz)->dir=rotacaoLL ( (*pRaiz)->dir); (*pRaiz)= rotacaoRR ( (*pRaiz) ); } } } } if(info[0] == (*pRaiz)->chave){ novo = (struct avl *) malloc(sizeof(struct avl)); if (novo == NULL) exit(0); else{ novo->prox = NULL; novo->esq = NULL; novo->dir = NULL; strcpy((novo)->info,info); novo->chave = info[0]; novo->pai=(*PAI); novo->bal=0; atual = *pRaiz; while(atual->prox != NULL){ atual = atual->prox; } atual->prox = novo; *pRaiz = atual; } //novo->prox = atual; //printf("(%d)%s\n",novo->bal, novo->info); //system("pause"); //anterior->prox = novo; //printf("(%d)%s\n",anterior->bal, anterior->info); //system("pause"); //*pRaiz = atual; return; } } }
  13. Criei uma estrutura do tipo pessoa e pretendo usá-la em uma lista encadeada, porém o seguintes erros aparecem: 'No' has no member named 'dados', 'No' has no member named 'prox' e unknow type name 'p' O programa nem chegou a rodar, alguém pode me ajudar? O arquivo .h é o seguinte: __________________________________________________________________ #ifndef Pessoa #define Pessoa typedef struct pessoa{ char nome[25]; char sobrenome[25]; int registro; }Pessoa; typedef struct no{ Pessoa dados; struct no *prox; }No; typedef struct lista{ No *cabeca; No *cauda; int tamanho; }Lista; No* criaNo(Pessoa p); Lista* criaLista(); void inserir(Lista *l, Pessoa p, int posicao); void remover(Lista* l, int registro); //pesquisa registro e remove a pessoa void imprimeLista(Lista* l); void destruirLista(Lista* l); #endif ________________________________________________________________ O arquivo .c é o seguinte: _______________________________________________________________ #include <stdio.h> #include <stdlib.h> #include "Pessoa.h" No* criaNo(Pessoa p) { No* n; n=(No*)malloc(sizeof(No)); n->dados = p; n->prox = NULL; return n; } Lista* criaLista() { Lista* l = (Lista*)malloc(sizeof(Lista)); l->cabeca = NULL; l->cauda = NULL; l->tamanho = 0; return l; } void inserir(Lista *l, Pessoa p, int posicao); { //já está pronta, porém não achei necessário colocá-la } void remover(Lista* l, int registro) { //já está pronta, porém não achei necessário colocá-la } void imprimeLista(Lista* l) { //já está pronta, porém não achei necessário colocá-la } void destruirLista(Lista *l) { //já está pronta, porém não achei necessário colocá-la }
  14. Olá galera. Estou elaborando um algoritmo de QuickLista, no qual é otimizado o Quicksort para Listas encadeadas. Embora seja mais custoso do que o uso de vetores, necessito fazer dessa forma. Se possível, analisem o código, está ocorrendo uma falha de segmentação, o qual aparentemente ocorre na função partition, quando o nó é removido. ## #include <stdio.h> #include <stdlib.h> typedef struct NODE { int valor; struct NODE *proximo; struct NODE *anterior; }node; typedef struct{ node *raiz; }lista; node *newNode(int); void addNode(lista*, node*); void rmNode(lista*, node*); lista *newLista(); void printLista(lista*); void partition(lista*,lista*,lista*); void quicksort(lista*); int main(int argc, char **argv){ int i = 1; lista *l = newLista(); /*while(i < argc){ addNode(l, newNode(atoi(argv))); i++; }*/ addNode(l, newNode(5)); addNode(l, newNode(8)); addNode(l, newNode(1)); addNode(l, newNode(3)); addNode(l, newNode(9)); printLista(l); quicksort(l); printLista(l); return 0; } node *newNode(int v){ node *n = (node*)malloc(sizeof(node)); n->valor = v; n->anterior = NULL; n->proximo = NULL; return n; } void addNode(lista *l, node *n){ node *r = l->raiz; if(r == NULL){ l->raiz = n; }else{ while(r->proximo != NULL){ r = r->proximo; } r->proximo = n; n->anterior = r; } } void rmNode(lista *l, node *n){ node *a, *b; if(n == l->raiz){ l->raiz = n->proximo; }else{ a = n->anterior; b = n->proximo; a->proximo = b; if(b != NULL){ b->anterior = a; } } n->anterior = NULL; n->proximo = NULL; } lista *newLista(){ lista *l = (lista*)malloc(sizeof(lista)); l->raiz = NULL; return l; } void printLista(lista *l){ node *r = l->raiz; while(r != NULL){ printf("%d ", r->valor); r = r->proximo; } printf("\n"); } void partition(lista *A,lista *B,lista *C){ node *n = A->raiz, *aux; int pivot; if(n != NULL){ aux = n->proximo; pivot = n->valor; while(n != NULL){ printf("pt\n"); rmNode(A, n); if(n->valor < pivot){ addNode(A, n); printf("menor\n"); } if(n->valor == pivot){ addNode(B, n); printf("igual\n"); } if(n->valor > pivot){ addNode(C, n); printf("maior\n"); } } } } void quicksort(lista* A){ printf("a\n"); node *a = A->raiz; lista *B = newLista(), *C = newLista(); if(a->proximo != NULL){ printf("a\n"); partition(A, B, C); printf("b\n"); quicksort(A); quicksort©; addNode(A, B->raiz); addNode(B, C->raiz); } }
  15. procurei em tudo quanto é lugar e não achei um exemplo simples de entender, alguém já conseguiu implementar o metodo inserir hashing com lista encadeada? tipo esse do codigo função de cálculo de hash
×
×
  • Criar Novo...