Lista duplamente encadeada com cabecalho
Publicado por Leonardo Barrozo dos Santos 10/03/2003
[ Hits: 18.306 ]
Código fonte de uma lista duplamente encadeada implementeda utilizando cabeçalho.
/*
+-----------------------------------------------------------+
| Programador: Leonardo Barrozo dos Santos |
| Descrição..: Programa que demonstra o funcionamente de |
| ...........: uma lista duplamente encadeada com cabeçalho.|
| Arquivo....: cabeclistaenca.c |
+-----------------------------------------------------------+
+-+---+-+
+------------------| | | |---------------+
| +-+---+-+ |
| +---------+ +---------+ +---------+ |
| | | | | | | |
+-+---+-+ +-+---+-+ +-+---+-+ +-+---+-+
+---| | | | | | | | | | | | | | | |---+
||| +-+---+-+ +-+---+-+ +-+---+-+ +-+---+-+ |||
| | | | | |
+---------+ +---------+ +---------+
*/
#include <stdio.h>
#include <stdlib.h>
#define MALLOC(x) ((x *) malloc (sizeof(x)))
void insere (void);
void exibir (void);
void exclui (void);
struct no{
int item;
struct no *proximo,*anterior;
};
typedef struct no no_t;
no_t *novo;
struct cabec{
int tamanho;
no_t *first;
no_t *last;
};
typedef struct cabec cabec_t;
cabec_t *t;
int main(void)
{
int op,k;
t=MALLOC(cabec_t);
t->tamanho = 0;
novo = t->first = t->last = 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: system("clear");
printf("Opção Errada");
scanf("%d",&k);
}
}
}
void insere(void)
{
int j;
printf("ITEM: ");
scanf("%d",&j);
novo = MALLOC(no_t);
novo->proximo = 0;
novo->item = j;
if (t->first == 0)
{
novo->anterior = 0;
t->first = novo;
}
else
{
t->last->proximo = novo;
novo->anterior = t->last;
}
t->last = novo;
t->tamanho++;
}
void exibir(void)
{
no_t *p;
char k[80];
system("clear");
if (t->first==0)
{
system("clear");
printf("Lista Vazia");
scanf("%s",&k);
return;
}
p = t->first;
do{
printf("\nITEM %d",p->item);
p = p->proximo;
}while (p!=0);
printf("\n\nTEM %d ITENS NA LISTA",t->tamanho);
scanf("%s",&k);
}
void exclui(void)
{
no_t *anterior1, *novo1, *ajuda;
int j,h=0;
char i[80];
novo1 = t->first;
if (t->first==0)
{
system("clear");
printf("Lista Vazia");
scanf("%s",&i);
return;
}
system("clear");
printf("Digite o item que deseja excluir: ");
scanf("%d",&j);
do{
if (novo1->item == j)
{
if (t->first->anterior == 0 && t->first->proximo == 0)
{
novo = t->first = t->last = 0;
t->tamanho = 0;
break;
}
else
if (novo1->anterior != 0 && novo1->proximo == 0)
{
anterior1->proximo=0;
t->last = anterior1;
free(novo1);
t->tamanho--;
break;
}
else
if (h == 0 && t->first->proximo != 0 && t->first->anterior == 0)
{
t->first = novo1->proximo;
t->first->anterior = 0;
novo1->proximo = 0;
novo1->anterior= 0;
free(novo1);
t->tamanho--;
break;
}
else
if (novo1->anterior != 0 && novo1->proximo != 0)
{
anterior1->proximo = novo1->proximo;
novo1->proximo = 0;
anterior1->proximo->anterior = novo1->anterior;
novo1->anterior = 0;
free(novo1);
t->tamanho--;
break;
}
}
anterior1 = novo1;
novo1 = novo1->proximo;
h++;
}while(novo1 != 0);
}
Converter Decimal para Binário em C
Calculadora simples de dois valores, soma, subtrai, multiplica e divide
Um parser para tratar opções passadas para um programa em C
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
VOL já não é mais como antes? (9)
É normal não gostar de KDE? (13)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









