Fila usando lista encadeada
Publicado por Kleber de Andrade Reis 13/06/2005
[ Hits: 28.066 ]
ae galera esse é um exemplo de fila usando lista encadeada.....
muito legal esse script....!!!!
/*
+-----------------------------------------------------------+
| Programador...: Kleber de Andrade Reis |
| Descrição.....: Programa da lista de exercicio |
| Professor ....: Evanderson |
| Arquivo.......: fila_n2.c |
+-----------------------------------------------------------+
Lista Simplesmente Encadeada
Desenvolva um programa, implementando as seguintes operações em filas. (cria, insere, exclui, vazia, imprime, primeiro, libera).
Sendo:
Cria: cria uma nova fila vazia.
Insere: inclui um elemento da fila.
Exclui: exclui um elemento da fila.
Vazia: retorna se a fila está vazia ou não.
Imprime: Imprime no vídeo os elementos da fila.
Primeiro: retorna o primeiro elemento da fila.
Libera: libera a memória alocada pela fila
Desenvolva uma rotina para incluir dois elementos na fila (insere2).
Desenvolva uma rotina para excluir n elementos da fila (excluin).
*/
#include <stdio.h>
#include <stdlib.h>
#define MALLOC(x) ((x *) malloc (sizeof(x)))
//declaração da estrutura
struct no{
int n1,n2,n3,n4;
char aluno[30];
struct no *proximo;
};
typedef struct no no_t;
no_t *novo;
//declaração das funções
no_t *cria(no_t *lista);
no_t *insini(no_t *lista);
no_t *insfim(no_t *lista);
no_t *insere2(no_t *lista);
no_t *retira(no_t *lista);
no_t *retiran(no_t *lista, int k);
int imprime(no_t *lista);
int vazia(no_t *lista);
int primeiro(no_t *lista);
no_t *libera(no_t *lista);
int main(void)
{
int op,k,r,m;
no_t *lista;
for (;;)
{
system("clear");
printf("\n0 - Cria uma lista");
printf("\n1 - Inclui um elemento na fila");
printf("\n2 - Inclui dois elemento na fila");
printf("\n3 - Exclui um elemento da fila");
printf("\n4 - Exclui n elemento da fila");
printf("\n5 - Verifica se a fila esta vazia");
printf("\n6 - Imprime os elementos da fila");
printf("\n7 - Imprime o primeiro elemento da fila");
printf("\n8 - Libera memoria");
printf("\n9 - Sair");
printf("\n\nSua opcao: \n");
scanf("%d",&op);
switch(op){
case 0 :
lista=cria(lista);
break;
case 1 :
getchar();
if(lista==NULL)
lista=insini(lista);
else
lista=insfim(lista);
break;
case 2 :
getchar();
lista=insere2(lista);
break;
case 3 :
lista=retira(lista);
break;
case 4 :
system("clear");
printf("Digite a quantidade a ser excluida\n");
scanf("%d",&k);
lista=retiran(lista,k);
break;
case 5 :
vazia(lista);
break;
case 6 :
imprime(lista);
break;
case 7 :
primeiro(lista);
break;
case 8 :
lista=libera(lista);
break;
case 9 :
exit(0);
default:
system("clear");
printf("Opção Errada");
scanf("%d",&k);
}
}
return 0;
}
no_t *cria(no_t *lista){
system("clear");
lista = MALLOC(no_t);
lista=0;
printf("Lista criada com sucesso!!!\n");
sleep(3);
return lista;
};
no_t *retiran(no_t *lista, int k)
{
int i=0;
no_t *p;
p=lista;
while(i<k)
{
if(lista!=NULL)
{
lista=lista->proximo;
free(p);
p=lista;
}
else
return NULL;
i++;
}
return lista;
};
no_t *retira(no_t *lista)
{
no_t *p;
p=lista;
if(lista!=NULL)
{
lista=lista->proximo;
free(p);
return lista;
}
return NULL;
};
no_t *libera(no_t *lista)
{
no_t *p;
p=lista;
if(lista!=NULL)
{
while(p!=NULL)
{
p=lista->proximo;
free(lista);
lista=p;
}
}
return NULL;
};
no_t *insini(no_t *lista)
{
int n1,n2,n3,n4;
char al[30];
printf("Digite o nome do aluno\n");
gets(al);
printf("N1: ");
scanf("%d",&n1);
printf("N2: ");
scanf("%d",&n2);
printf("N3: ");
scanf("%d",&n3);
printf("N4: ");
scanf("%d",&n4);
novo = MALLOC(no_t);
novo->proximo = lista;
sprintf(novo->aluno,"%s",al);
novo->n1 = n1;
novo->n2 = n2;
novo->n3 = n3;
novo->n4 = n4;
return novo;
};
no_t *insfim(no_t *lista)
{
int n1,n2,n3,n4;
no_t *aux;
char al[30];
aux=lista;
printf("Digite o nome do aluno\n");
gets(al);
printf("N1: ");
scanf("%d",&n1);
printf("N2: ");
scanf("%d",&n2);
printf("N3: ");
scanf("%d",&n3);
printf("N4: ");
scanf("%d",&n4);
novo = MALLOC(no_t);
while(aux->proximo!=NULL)
{
aux=aux->proximo;
}
novo->proximo = NULL;
sprintf(novo->aluno,"%s",al);
novo->n1 = n1;
novo->n2 = n2;
novo->n3 = n3;
novo->n4 = n4;
aux->proximo=novo;
return lista;
};
no_t *insere2(no_t *lista)
{
int n1,n2,n3,n4,i=0;
char al[30];
no_t *aux;
aux=lista;
while(i<2)
{
printf("Digite o nome do aluno\n");
gets(al);
printf("N1: ");
scanf("%d",&n1);
printf("N2: ");
scanf("%d",&n2);
printf("N3: ");
scanf("%d",&n3);
printf("N4: ");
scanf("%d",&n4);
novo = MALLOC(no_t);
novo->proximo = NULL;
sprintf(novo->aluno,"%s",al);
novo->n1 = n1;
novo->n2 = n2;
novo->n3 = n3;
novo->n4 = n4;
if(aux==NULL)
{
aux=novo;
aux->proximo=NULL;
lista=aux;
}
else
{
while(aux->proximo!=NULL)
{
aux=aux->proximo;
}
aux->proximo=novo;
}
i++;
getchar();
}
return lista;
};
int imprime(no_t *lista)
{
no_t *p;
int k,i=0;
system("clear");
if (lista==NULL)
{
system("clear");
printf("Lista Vazia");
scanf("%d",&k);
return 0;
}
p = lista;
do{
printf("\nAluno: %s",p->aluno);
printf("\nN1: %d",p->n1);
printf("\nN2: %d",p->n2);
printf("\nN3: %d",p->n3);
printf("\nN4: %d",p->n4);
printf("\n");
p = p->proximo;
i++;
}while (p!=NULL);
printf("\n\nTEM %d ITENS NA LISTA",i);
scanf("%d",&k);
return 0;
};
int vazia(no_t *lista)
{
system("clear");
no_t *p;
p=lista;
int i=0;
while(p!=NULL)
{
p=p->proximo;
i++;
}
if(i==0)
printf("A lista esta vazia!!!\n");
else
printf("\n\nTEM %d ITENS NA LISTA",i);
sleep(3);
return i;
};
int primeiro(no_t *lista)
{
no_t *p;
int k;
system("clear");
if (lista==NULL)
{
system("clear");
printf("Lista Vazia");
scanf("%d",&k);
return 0;
}
p = lista;
printf("\nAluno: %s",p->aluno);
printf("\nN1: %d",p->n1);
printf("\nN2: %d",p->n2);
printf("\nN3: %d",p->n3);
printf("\nN4: %d",p->n4);
printf("\n");
scanf("%d",&k);
return 0;
};
Métodos de Ordenação - Quick Sort
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (2)
Erro no suitable vídeo mode (15)
VOL já não é mais como antes? (14)









