Lista duplamente encadeada com cabecalho
Publicado por Leonardo Barrozo dos Santos 10/03/2003
[ Hits: 18.246 ]
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); }
Algoritmo estatístico para cálculo de PI em C
Loop de Várias Váriáveis Em Um Único Laço "For" em C
Nenhum coment�rio foi encontrado.
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Dica para encontrar diversos jogos Indies criativos
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Dificuldade com Ocs 2.12.3 no Debian 13 com Apache2 - Can't load ... (4)
paginação dos favoritos não funciona no vivaolinux[BU... (4)