Lista encadeada
Publicado por Leonardo Barrozo dos Santos 10/03/2003
[ Hits: 22.832 ]
Código fonte de um programa de lista encadeada.
/*
+-----------------------------------------------------------+
| Programador: Leonardo Barrozo dos Santos |
| Descrição..: Programa que demonstra o funcionamente de |
| ...........: uma lista encadeada |
| Arquivo....: listaencadeada.c |
+-----------------------------------------------------------+
+---+-+ +---+-+ +---+-+ +---+-+
| | |--->| | |--->| | |---> ... | | |
+---+-+ +---+-+ +---+-+ +---+-+
*/
#include <stdio.h>
#include <stdlib.h>
#define MALLOC(x) ((x *) malloc (sizeof(x))) //Este define torna a utilização do malloc mais fácil
void insere (void);
void exibir (void);
void exclui (void);
struct no{
int item;
struct no *proximo;
};
typedef struct no no_t;
no_t *primeiro, *novo, *ultimo;
int main (void)
{
int op;
primeiro = novo = ultimo = 0;
for (;;)
{
system("clear");
printf("\n1- Inserir");
printf("\n2- Exibir");
printf("\n3- Excluir");
printf("\n4- Sair");
printf("\nSua opção: ");
scanf ("%d",&op);
switch(op){
case 1 : insere();
break;
case 2 : exibir();
break;
case 3 : exclui();
break;
case 4 : exit (0);
default: printf("Opcao Errada");
}
}
}
void insere (void)
{
int j;
system("clear");
printf("ITEM : ");
scanf ("%d",&j);
novo = MALLOC(no_t);
novo->proximo = 0;
novo->item = j;
if (primeiro == 0)
primeiro = novo;
else
ultimo->proximo = novo;
ultimo=novo;
}
void exibir (void)
{
no_t *p;
char s[80];
system("clear");
if (primeiro == 0)
{
printf("Lista Vazia");
return;
}
p = primeiro;
do{
printf("\nITEM %d",p->item);
p = p->proximo;
}while (p!=0);
printf("\n<S>air");
scanf("%s",&s);
}
void exclui (void)
{
no_t *anterior, *novo1;
int j,i;
novo1 = primeiro;
system("clear");
if (primeiro == 0)
{
printf("Lista Vazia");
return;
}
i = 0;
printf("Digite o item que deseja excluir: ");
scanf ("%d",&j);
do{
if (novo1->item == j)
{
if (primeiro->proximo == 0)
{
primeiro = novo = ultimo = 0;
break;
}
else
if (novo1->proximo == 0)
{
anterior->proximo=0;
free(novo1);
break;
}
else
if (i==0 && primeiro->proximo != 0)
{
primeiro = novo1->proximo;
novo1->proximo = 0;
free(novo1);
break;
}
else
if (novo1->proximo != 0);
{
anterior->proximo = novo1->proximo;
novo1->proximo = 0;
free(novo1);
break;
}
}
anterior = novo1;
novo1 = novo1->proximo;
i = i + 1;
}while(novo1 != 0);
}
Métodos de Ordenação - Radix Sort
Controle de maior idade em C++
Controle de tráfego aéreo - filas dinâmicas
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Conky, alerta de temperatura alta (10)
Assisti Avatar 3: Fogo e Cinzas (3)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (42)









