Lista encadeada com cabecalho

Publicado por Leonardo Barrozo dos Santos 10/03/2003

[ Hits: 12.329 ]

Download cabeclistaenca.c




Código fonte de um programa sobre lista encadeada com cabeçalho.

  



Esconder código-fonte

/*
 +-----------------------------------------------------------+
 | Programador: Leonardo Barrozo dos Santos                  |
 | Descrição..: Programa que demonstra o funcionamente de    |
 | ...........: uma lista 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;
         };

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;

void 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)  t->first = novo;
 else  
        t->last->proximo = novo; 
 t->last = novo;
 t->tamanho++;
}
 
void exibir(void)
{
 no_t *p;
 int k;
 system("clear");
 if (t->first==0)
 {
  system("clear");
  printf("Lista Vazia");
  scanf("%d",&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("%d",&k); 
}

void exclui(void)
{
 no_t *anterior, *novo1;
 int j,i;
 novo1 = t->first;
 if (t->first==0)
 {   
    system("clear");
    printf("Lista Vazia");
    scanf("%d",&i);
    return;
 }
 i=0;
 system("clear");
 printf("Digite o item que deseja excluir: ");
 scanf("%d",&j);
 do{
    if (novo1->item == j)
    {
     if (t->first->proximo == 0)
      {
       novo = t->first = t->last = 0;
       t->tamanho = 0;
       break;
      }
     else
     if (novo1->proximo == 0)
      {
       anterior->proximo=0;
       t->last = anterior;
       free(novo1);
       t->tamanho--;
       break;  
      }
     else
     if (i==0 && t->first->proximo != 0)
      {
       t->first = novo1->proximo;
       novo1->proximo = 0;
       free(novo1);
       t->tamanho--;
       break;
      } 
     else
     if (novo1->proximo != 0)
      {
       anterior->proximo = novo1->proximo;
       novo1->proximo = 0;
       free(novo1);
       t->tamanho--;
       break;
      }
    }
    anterior = novo1;
    novo1 = novo1->proximo;
    i = i + 1;
 }while(novo1 != 0);  
} 

Scripts recomendados

Algoritmo estatístico para cálculo de PI em C

Fila

Duplamente Circular

Deep First Search

Fila usando lista encadeada


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts