Lista encadeada com cabecalho

Publicado por Leonardo Barrozo dos Santos 10/03/2003

[ Hits: 11.855 ]

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

Jogando dados e somando os valores

Calculadora simples de dois valores, soma, subtrai, multiplica e divide

Retorna o tempo ocioso em uma sessão do X

Loop de Várias Váriáveis Em Um Único Laço "For" em C

Fila usando lista encadeada


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts