Jump to content

Archived

This topic is now archived and is closed to further replies.

crookedthing

Organizar lista encadeada em ordem alfabética usando TAD e ponteiros.

Recommended Posts

Pessoal, eu tenho que criar uma lista encadeada que permita inserir e remover dados organizando-os em ordem alfabética( de acordo com o nome inserido). Consigo fazer isso em código comum, mas usando listas fica muito difícil. Estou tendo muita dificuldade. Envio o código, mas não compila, está cheio de falhas que eu não faço ideia de como solucionar. Obrigado.

 

Este é o código onde desenvolvo as listas e as estruturas

#include<stdilib.h>
#include<stdio.h>
#include<string.h>
//nodo principal do código
struct nodo{
	int matricula;
	char nome[40];
	float nota;
	struct nodo *prox;
	
};
//ponteiro para o nodo. Inicio da lista
struct nodo *inicio;//variavel global, acessavel por todos


//função de inserção de dados
//data= dados, n=posição
void insert(int matricula, char nome[40], float nota){
	//variavel auxiliar.
	struct nodo *temp;
	//conferir alocação de memoria com a criação de um nodo
	//criar um ponteiro para o nodo
	struct nodo* novo = (struct nodo*)malloc(sizeof(struct nodo*));
	
	if(novo==NULL){
		printf("sem memoria!");
	}
	//se read estiver fazia,enfia o valor em inicio.
	if inicio(==NULL){
		novo->matricula= data;// preenche com o valor
		//FALTA PREENCHER O RESTO
		novo->prox = NULL;//a proxima posição aponta para null.
		inicio = novo;//inicio aponta para a 1º posição
	}else{
		//se o inicio não estiver vazio, preenche o nodo
		novo->matricula;
		novo->nome;
		novo->nota;
		while(strcmp(temp->data,novo->data)>0){//substituir data aqui
			temp= temp->prox;//variavel temporaria aponta para o proximo.
			temp->prox = novo;//depois aponta para novo.
		}
		
	}
}

void Mostrar(){
  struct nodo *aux = inicio;
  printf("INICIO: %p\n", inicio);
  while (aux != NULL) {
    printf("%p|%.2f|%s|%d\n", aux, aux->nota,aux->nome,aux->matricula);
    aux = aux->prox;
  }
  printf("\n");
}

int Retirar(){
  struct nodo *aux, *auxOld;

  if (inicio == NULL)
    return 0;
  /// Percorrer a lista ate o fim
  aux = inicio;
  auxOld = NULL;
  while (aux->prox != NULL) {
    auxOld = aux;
    aux = aux->prox;
  }
  free(aux);
  auxOld->prox = NULL;
  return 1;
}

Share this post


Link to post
Share on other sites

  • Similar Content

    • By jeredy
      Tenho um trabalho da faculdade e não consigo fazer rodar o programa corretamente.
      Quando eu coloco o cpf, na hora de imprimir sai um número aleatório. Creio que possa ser por falta de memória pois se coloco um número menor ele sai certo, porém não consigo adicionar memória em cpf.
       
      Obs: ainda não fiz a parte dos menores e da medial do grupo e a parte de imprimir em tabela pois não consegui fazer funcionar nem um básico mas se alguém souber essa parte também e puder me ajudar agradeço!!
       
      #include <stdio.h> #include <stdlib.h> main(){ struct funcionarios{ int *cpf; char nome[30]; int nascimento; float salario; }; int aux=0; //para testar se for 0 antes de armazenar o cpf struct funcionarios *func; int qtdLeitura=0, i=0, cont=0; func = ((struct funcionarios *) (malloc(sizeof(struct funcionarios) * 1))); while(1){ printf("Digite o cpf %d: ", i+1); scanf("%d", &aux); if(aux!= 0){ func.cpf = aux; fflush(stdin); } else{ break; } if(func != NULL){ qtdLeitura++; func = ((struct funcionarios *) realloc(func, sizeof(struct funcionarios) *(qtdLeitura+1))); } printf("Digite o nome %d: ", i+1); scanf("%s", func.nome); printf("Digite o nascimento %d: ",i+1); scanf("%d", &func.nascimento); printf("Digite o salario %d: ",i+1); scanf("%f", &func.salario); cont++; i++; } printf("\n\n"); for(i=0;i<cont;i++){ printf("Cpf %d:%d \n",i+1, func.cpf); printf("Nome %d: %s\n",i+1, func.nome); printf("Nascimento %d: %d\n",i+1, func.nascimento); printf("Salario %d: %.2f\n",i+1, func.salario); } }
       

    • By Edwar Saliba Jr.
      Boa tarde Senhores(as)!
       
      O código-fonte a seguir é a miniaturização de um problema maior no qual estou trabalhando.
       
      Preciso imprimir os valores do vetor gerado pela função "fazVetor", na função "main".
       
      Porém, para que o código se assemelhe ao problema real no qual estou trabalhando, existem duas restrições que devem ser respeitadas. Estas estão comentadas no código a seguir.
       
      #include <stdio.h> #include <stdlib.h> #define TAM 3 int fazVetor(int **vet){ int *array = malloc(sizeof(int) * TAM); array[0] = 4; array[1] = 7; array[2] = 8; /* nesta função somente a linha a seguir pode ser alterada. */ *vet = array; } int main() { int **qq; /* Na função main, somente a linha a seguir NÃO PODE ser alterada. */ fazVetor(&qq); printf("\n--==[Valores do Vetor]==--\n\n"); for(int i = 0; i < TAM; i++){ printf(" %d", (qq[i])); } printf("\n\n"); return 0; }  
      O único objetivo é a impressão dos valores do vetor na função "main". Respeitadas as devidas restrições.
       
      De antemão, muito obrigado!
       
       
      Edwar Saliba Jr.
    • By mauricio lanner
      Bom dia pessoal, estou com um probleminha, preciso entregar hoje um trabalho de faculdade em algoritimos computacionais, mas to me batendo muito.
      A questão é assim:
       
      Faça um programa que leia números do teclado e os armazene em um vetor alocado dinamicamente. O usuario irá digitar uma sequência de números, sem limite de quantidade. Os números serão digitados um a um e, sendo que caso ele deseje encerrar a entrada de dados, ele irá digitar o numero ZERO. Os dados devem ser armazenados na memória deste modo:
          • Inicie com um vetor de tamanho 10 alocado dinamicamente;
          • Apos, caso o vetor alocado esteja cheio, aloque um novo vetor do tamanho do vetor anterior adicionado espaço para mais 10 valores (tamanho N+10, onde N inicia com 10);
          • Copie os valores já digitados da área inicial para esta área maior e libere a memória da área inicial;
          • Repita este procedimento de expandir dinamicamente com mais 10 valores o vetor alocado cada vez que o mesmo estiver cheio. Assim o vetor ira ser ’expandido’ de 10 em 10 valores.
       
      O grande problema que estou tendo é que não consigo fazer o while repetir da forma que preciso. iniciei o programa assim:
      #include <stdio.h> #include <stdlib.h> main(){ int *vetor,tam=10,i=0; vetor = malloc(sizeof(int)*tam); while (vetor!=0 || i<tam){ scanf("%d",vetor+i); printf("%d i \n",i); i++; } for(i=0;i<tam;i++){ printf("indice %d vetor %d\n",i,vetor+i); } } mas o ||(ou) não quer funcionar, ou ele usa um como parametro ou usa a outra regra.
      Alguem consegue me ajudar a resolver isso?
    • By Sr.Hozuki
      Estou estudando listas em C, e sinceramente, estou achando a coisa mais difícil do mundo porque não sei bem a aplicação disso. Alguém sabe um livro ou pode ser até um pdf que mostre como funciona uma lista? Tipo, dando os conceitos e tal, mas mostrando um código que de para entender bem, porque nos livros que vi dão apenas o conceito e o cara que se vire para usar aquela coisa de tipo abstrato de dados, estou bem confuso D: Agradeço a quem ajudar
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.