Ir ao conteúdo
  • Cadastre-se

Ordenação em C


flpbraga

Posts recomendados

Pessoal, eu preciso de uma ajuda para fazer ordenação

bubble sort

shell sort

heap sort

merge sort

nesse codigo abaixo

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct aluno
{
int RA;
struct aluno *prox;
};

typedef struct aluno Novo_Aluno;
Novo_Aluno *primeiro, *novo, *atual;
void Novo_Contato();
void Exibir_Contato();
void Remover_Contato();
main()
{
primeiro=(Novo_Aluno*) NULL;
while(1)
{
printf("Digite a opção desejada: \n");
printf("'N' para novo cadastro \n");
printf("'E' para exibir cadastros \n");
printf("'R' para remover cadastro\n");
printf("'O' para organizar cadastro\n");
switch(getch())
{
case 'N':
{
Novo_Contato();
break;
}
case 'E':
{
Exibir_Contato();
break;
}
case 'R':
{
Remover_Contato();
break;
}
// case 'O':
// {
// bubbleSort();
// break;
// }
case 27:
{
exit(1);
}
}
}
}

void Novo_Contato()
{
//Alocação para novo cadastro
novo=(Novo_Aluno*)malloc(sizeof(Novo_Aluno));
if(primeiro == (Novo_Aluno*) NULL)
{
primeiro=novo;
atual=primeiro;
}
else
{
atual=primeiro;
while(atual->prox != (Novo_Aluno*)NULL)
{
atual=atual->prox;
}
atual->prox=novo;
}
system("cls");
puts("Novo Cadastro");
scanf("%d", &novo->RA);
novo->prox=(Novo_Aluno*)NULL;

Exibir_Contato();
}

void Exibir_Contato()
{
system("cls");
if(primeiro == (Novo_Aluno*) NULL)
{
printf("Fila Vazia\n");
}
else
{
atual=primeiro;
printf("\n %d", *atual);

while(atual->prox != (Novo_Aluno*)NULL)
{
atual=atual->prox;
printf("\n %d", *atual);
}
printf("\n\n");
}
}

void Remover_Contato()
{
int count = 0;

system("cls");
if(primeiro == (Novo_Aluno*) NULL)
{
printf("Fila Vazia\n");
}
else
{
atual=primeiro;
while(atual->prox != (Novo_Aluno*)NULL)
{
count++;
atual=atual->prox;
}
atual=primeiro;
while(count > 2)
{
if(atual->prox != NULL){
atual=atual->prox;
}
count--;
}
if(atual->prox != 0){
atual=atual->prox;
}

if(atual == primeiro){
primeiro=(Novo_Aluno*)NULL;
}
else{
if(atual->prox == 0){
atual=primeiro;
}
atual->prox=NULL;
}
}
}

obrigadoooo

Link para o comentário
Compartilhar em outros sites

Ola flpbraga,

Se você já sabe como funciona todos esses métodos com vetores então não é muito difícil adaptar eles para o seu programa. No seu programa você tem que ordenar uma lista ligada com nós do tipo Novo_aluno.

Essa lista se comporta quase como um vetor a diferença é que para percorrer cada elemento você usa:


Novo_aluno *aux; //ponteiro para um elemento da lista
Novo_aluno *lista;//ponteiro para o começo da lista

for (aux = lista; aux != NULL; aux = aux->prox)
{
/*percorre a lista membro a membro até o fim cada nó aparece em aux*/
}
/*ps. Note que último elemento da lista tem campo prox == NULL*/

Algumas dificuldades extras vão surgir quando você tiver que inserir ou retirar nós do meio da lista, sugiro que você pesquise mais sobre listas ligadas.

Última observação, no seu programa você não declarou a variável 'primeiro' e a não ser que você faça ela global você não pode acessar ela nas funções:

void Novo_Contato();

void Exibir_Contato();

void Remover_Contato();

sem passar ela como argumento.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!