Lista encadeada com cabecalho

Publicado por Leonardo Barrozo dos Santos 10/03/2003

[ Hits: 12.429 ]

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

Ordenação Bolha

Lista Circular

Método eficiente de armazenamento utilizando containers (Vector e Map)

Metaphone para Português

Introdução a Recursão


  

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