Lista encadeada
Publicado por Leonardo Barrozo dos Santos 10/03/2003
[ Hits: 22.450 ]
Código fonte de um programa de lista encadeada.
/* +-----------------------------------------------------------+ | Programador: Leonardo Barrozo dos Santos | | Descrição..: Programa que demonstra o funcionamente de | | ...........: uma lista encadeada | | Arquivo....: listaencadeada.c | +-----------------------------------------------------------+ +---+-+ +---+-+ +---+-+ +---+-+ | | |--->| | |--->| | |---> ... | | | +---+-+ +---+-+ +---+-+ +---+-+ */ #include <stdio.h> #include <stdlib.h> #define MALLOC(x) ((x *) malloc (sizeof(x))) //Este define torna a utilização do malloc mais fácil void insere (void); void exibir (void); void exclui (void); struct no{ int item; struct no *proximo; }; typedef struct no no_t; no_t *primeiro, *novo, *ultimo; int main (void) { int op; primeiro = novo = ultimo = 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: printf("Opcao Errada"); } } } void insere (void) { int j; system("clear"); printf("ITEM : "); scanf ("%d",&j); novo = MALLOC(no_t); novo->proximo = 0; novo->item = j; if (primeiro == 0) primeiro = novo; else ultimo->proximo = novo; ultimo=novo; } void exibir (void) { no_t *p; char s[80]; system("clear"); if (primeiro == 0) { printf("Lista Vazia"); return; } p = primeiro; do{ printf("\nITEM %d",p->item); p = p->proximo; }while (p!=0); printf("\n<S>air"); scanf("%s",&s); } void exclui (void) { no_t *anterior, *novo1; int j,i; novo1 = primeiro; system("clear"); if (primeiro == 0) { printf("Lista Vazia"); return; } i = 0; printf("Digite o item que deseja excluir: "); scanf ("%d",&j); do{ if (novo1->item == j) { if (primeiro->proximo == 0) { primeiro = novo = ultimo = 0; break; } else if (novo1->proximo == 0) { anterior->proximo=0; free(novo1); break; } else if (i==0 && primeiro->proximo != 0) { primeiro = novo1->proximo; novo1->proximo = 0; free(novo1); break; } else if (novo1->proximo != 0); { anterior->proximo = novo1->proximo; novo1->proximo = 0; free(novo1); break; } } anterior = novo1; novo1 = novo1->proximo; i = i + 1; }while(novo1 != 0); }
Algoritmo para detecção do sistema operacional em C
Controle de tráfego aéreo - filas dinâmicas
Converter Decimal para Binário em C
Agora temos uma assistente virtual no fórum!!! (247)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Agora temos uma assistente virtual no fórum!!! (247)
iso de sistema 32 bit em atividade (12)
Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel... (27)