Home
Professores
Ana Monteiro
Luis Arturo
Osman
Luciano
Celso
André
Downloads
IDE's
Eclipse
NetBeans
Dev C++
CodeBlocks
Pascal ZIM
Apostilas
Games
Software
Office
Cursos
Online
Gratuito
Java
Pago
Softblue
Presencial
Intellectuale
IAI
Simulados
Itil V3
Cobit Foundation
CBTS
PMP/CAPM
Referências
Luis Arturo
Celso Concheto
Outros
Liesenberg
Macoratti
1 Bit
Idéia Programada
TI Especialistas
Átilla Arruda(Certificações)
Livros
C / C++
C++ Como programar, Deitel
Curso de C++
Programando Microcontroladores PIC Linguagem C
Java
Aula André
Sub Child Category 2
Sub Child Category 3
Pascal
Sub Child Category 1
Sub Child Category 2
Sub Child Category 3
PHP
Sub Child Category 1
Sub Child Category 2
Sub Child Category 3
Visual Basic
HTML / Javascript
Delphi
Programação orientada a objeto em Delphi
Sub Child Category 2
Sub Child Category 3
Assembly
Android
INFORMAÇÕES
Cronograma
Horários
PAAD
Grade Curricular
E-mails
Professores
Alunos
Veduca
Humor
quarta-feira, 22 de maio de 2013
C: Lista Duplamente Ligada
00:10
C
No comments
#include
#include
#include
struct noLista{ /* estrutura duplamente auto-referenciada */ char valor; struct noLista *anterior, *proximo; }; typedef struct noLista NOLISTA; /* definição do tipo NOLISTA a partir do tipo 'struct noLista' */ typedef NOLISTA *NOLISTAPTR; /* definição do tipo *NOLISTAPTR a partir do tipo NOLISTA */ /* insere um nó no início da lista */ void insere_no_inicio(NOLISTAPTR *inicio, char valor){ NOLISTAPTR novo; novo = (NOLISTAPTR) malloc(sizeof(NOLISTA)); /* aloca memória para o novo nó */ if(novo == NULL) /* se não houver memória disponível */ return; /* sai da função */ if(*inicio == NULL){ /* se a lista estivava vazia */ novo->valor = valor; /* insere o valor no novo nó */ novo->proximo = novo->anterior = NULL; /* não há próximo nó nem nó anterior, pois só há um nó */ *inicio = novo; /* o novo nó é o primeiro da lista */ } else{ /* se já havia nó na lista */ novo->valor = valor; /* insere o valor no novo nó */ novo->anterior = NULL; /* não há nó anterior */ novo->proximo = *inicio; /* o novo nó aponta para o que está no início */ (*inicio)->anterior = novo; /* o nó atual do início aponta para o novo nó */ *inicio = novo; /* o novo nó passa a ser o primeiro da lista */ } } /* insere um valor no final da lista */ void insere_no_final(NOLISTAPTR *inicio, char valor){ NOLISTAPTR novo, atual; novo = malloc(sizeof(NOLISTA)); if(novo == NULL) return; if(*inicio == NULL){ novo->valor = valor; novo->proximo = novo->anterior = NULL; *inicio = novo; } else{ atual = *inicio; /* atual aponta para o início */ while(atual->proximo != NULL) /* enquanto o nó atual não for o último */ atual = atual->proximo; /* vai para o nó seguinte */ novo->valor = valor; novo->anterior = atual; /*o nó anterior ao novo é o nó atual */ novo->proximo = NULL; /* não há próximo nó, pois o novo será o último */ atual->proximo = novo; /* o nó atual aponta para o novo nó e não é mais o último */ } } /* remove um nó escolhido pelo usuário */ int retira(NOLISTAPTR *inicio, char valor){ NOLISTAPTR temporario, atual; if(*inicio == NULL) return 0; /* retorna 0 caso a lista esteja vazia */ atual = *inicio; /* o nó atual é o do início */ if((*inicio)->valor == valor) /* caso o no a ser retirado seja o do inicio */ *inicio = (*inicio)->proximo; /* o nó inicial passa a ser o próximo da lista */ while(atual != NULL && atual->valor != valor) /*se há nó e o valor do mesmo não é o valor que se quer retirar*/ atual = atual->proximo; /*passa para o próximo*/ if(atual == NULL) return 0; /* retorna 0 se não encontrou o valor */ /* caso tenha encontrado */ else{ temporario = atual; /* temporario aponta para o nó encontrado */ if(atual->anterior != NULL)/* caso haja um nó anterior ao enontrado*/ atual->anterior->proximo = atual->proximo; /* faz o nó anterior apontar para o nó posterior ao encontrado */ if(atual->proximo != NULL) /* caso haja um nó posterior ao enontrado*/ atual->proximo->anterior = atual->anterior; /* faz o nó posterior apontar para o nó anterior ao encontrado */ free(temporario);/* remove o nó encontrado */ } return 1; } /* deleta um nó apartir do início da lista */ char elimina_no(NOLISTAPTR *inicio){ NOLISTAPTR temporario; char c; temporario = *inicio; /* nó do início passa a ser temporário */ c = (*inicio)->valor; /* pega o valor que estava no nó */ *inicio = (*inicio)->proximo; /* o nó seguinte passa a ser o do início */ free(temporario); /* deleta o nó temporário */ return c; } int esta_vazia(NOLISTAPTR lista){ return lista == NULL; } void imprime_lista_ordem_direta(NOLISTAPTR lista){ if(esta_vazia(lista)) printf("\n\nA lista esta vazia.\n\n"); else{ printf("\nA lista eh:\n\n"); while(lista != NULL){ printf(" %c", lista->valor); lista = lista->proximo; } } } void imprime_lista_ordem_inversa(NOLISTAPTR lista){ if(esta_vazia(lista)) printf("\n\nA lista esta vazia.\n\n"); else{ while(lista->proximo != NULL) /* enquanto não chegar no último nó ...*/ lista = lista->proximo; /* ... percorre a lista */ printf("\nA lista eh:\n\n"); while(lista != NULL){ printf(" %c", lista->valor); lista = lista->anterior; } } } void menu(){ printf(" <------> OPERACOES BASICAS EM UMA LISTA DUPLAMENTE ENCADEADA <------>\n\n"); printf("\n\n\t\t\t\t OPCOES\n\n"); printf("\t\t1 - Inserir um elemento no inicio da lista\n"); printf("\t\t2 - Inserir um elemento no final da lista\n"); printf("\t\t3 - Remover um elemento da lista\n"); printf("\t\t4 - Imprimir a lista na ordem direta\n"); printf("\t\t5 - Imprimir a lista na ordem inversa\n"); printf("\t\t6 - sair\n\n"); } int main(){ NOLISTAPTR lista = NULL; int opcao; char valor; menu(); printf("Escolha uma das opcoes: "); scanf("%d", &opcao); while(opcao != 6){ switch(opcao){ case 1: printf("\nDigite um caracetere: "); scanf("\n%C", &valor); insere_no_inicio(&lista, valor); system("cls"); break; case 2: printf("\nDigite um caracetere: "); scanf("\n%C", &valor); insere_no_final(&lista, valor); system("cls"); break; case 3: printf("\nDigite o valor a ser retirado: "); scanf("\n%c", &valor); if(! retira(&lista, valor)){ printf("\nNo inexistente!\n\n"); getch(); } system("cls"); break; case 4: imprime_lista_ordem_direta(lista); getch(); system("cls"); break; case 5: imprime_lista_ordem_inversa(lista); getch(); system("cls"); break; default: printf("\nOpcao invalida!!!\n\n"); getch(); system("cls"); break; } menu(); printf("Escolha uma das opcoes: "); scanf("%d", &opcao); } printf("\nLimpando lista ...\n\n"); while(! esta_vazia(lista)){ /* retira todos os nós não apagados para liberar a memória */ printf("No %c retirado\n", elimina_no(&lista)); } printf("\nLista vazia\n"); getch(); return 0; }
Enviar por e-mail
Postar no blog!
Compartilhar no Twitter
Compartilhar no Facebook
Compartilhar com o Pinterest
Postagem mais recente
Postagem mais antiga
Página inicial
0 comentários:
Postar um comentário
Assinar:
Postar comentários (Atom)
Perfis Sociais
Popular
Tags
Arquivos Blog
Redes de computadores e a internet, Kurose - 5ª Edição
Abaixo estarei disponibilizando o livro em que o professor Osman está usando como referência para ministrar suas aulas no 2º ano. É bom s...
C: Jogo Batalha Naval
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <time.h> #include &qu...
Humor #1
Curso de Java
Curso de JAVA para iniciantes e profissionais, do básico ao avançado, disponibilizado pela Universidade XTI www.universidadexti.com.br para ...
Apostila AutoCad Civil 3D 2012 – Autodesk
Objetivo deste documento é apresentar ao usuário algumas das funcionalidades básicas do software AutoCAD Civil 3D. O software AutoCAD C...
Programar no Android
Bom pessoal, estarei listando abaixo algumas aplicações(apk) para se programar no próprio celular. São compiladores bem funcionais e testei ...
Adobe Photoshop CS6 Final Extended Portátil (x86/x64)
O software Adobe Photoshop CS6 oferece a magia da criação de imagens mais moderna, novas opções de criação e um desempenho incrivelment...
Autodesk AutoCAD 2014 (x86/x64)
Desenhe e modele o mundo ao seu redor com os recursos versáteis e poderosos do software AutoCAD®, uma das principais ferramentas de pro...
C: Lista Simplesmente Encadeada
/*30/05/13 01:03 Autor: Gustavo Silva Peotta Instituição de Ensino: FACCAMP Plataforma: Windows Função do programa: O programa con...
'The Last of Us' e 'GTA 5' chegarão ao Brasil em português
Além da produção do Playstation 3 no Brasil, a Sony guardou mais algumas surpresas para os fãs brasileiros. A companhia anunciou que o a...
Quem sou eu
GTX IPTV
Ver meu perfil completo
Tecnologia do
Blogger
.
Labels
Android
(1)
Apostila
(2)
C
(16)
Dicas
(4)
Estrutura de dados
(1)
Humor
(6)
Java
(1)
Livros
(1)
Luciano
(1)
Luis Arturo
(1)
Notícias
(13)
Sistemas Digitais
(1)
Software
(15)
Blog Archive
▼
2013
(60)
►
junho
(2)
▼
maio
(44)
C: Lista Simplesmente Encadeada
Apostila AutoCad Civil 3D 2012 – Autodesk
Adobe Photoshop Dicas & Truques Vol.2 – Iphoto
Google Earth Pro 7 + Ativação
Nero Multimedia Platinum 12
Adobe Photoshop CS6 Final Extended Portátil (x86/x64)
AVG Internet Security 2013 (x86/x64)
Nero Burning ROM 12 PT-BR
Autodesk AutoCAD 2014 (x86/x64)
ESET Smart Security 6 + Ativação (x86 e x64)
PC Cleaner Pro 2013
Avast Premier Antivirus 8
Avira Antivirus Premium 2013 + Ativação
Pinnacle Studio Ultimate 16 + Ativação
SpeedyPC Pro 3.1
CCleaner Professional e Business Edition 4
Video Converter Ultimate 6.5
Nitro PDF Pro 8.5 (x32/x64)
Samsung lança modelo de carteira virtual
21 mi de pessoas comprarão o Google Glass em 2018,...
Adesivo criado no Japão evita superaquecimento do ...
5G será até 1.000 vezes melhor que 4G, aposta pesq...
'The Last of Us' e 'GTA 5' chegarão ao Brasil em p...
EA anuncia demissão de 900 funcionários
Cinemark passa a enviar ingressos para o celular d...
Os 25 apps gratuitos mais baixados para iPhone
NASA investe em impressora 3D de pizza
SAP contratará autistas para programar
Menina desenvolve algoritmo que diagnostica leucemia
Pelo 2º ano, Apple tem a marca mais valiosa do mundo
C: Jogo da Velha
C: Jogo de RPG
C: Jogo Quiz de Informática
C: Jogo Batalha Naval
C: Caixa Eletrônico
C: Lista Simplesmente Ligada
C: Lista Duplamente Ligada
C: Criador de Arquivo
C: Jogo de Adivinhação
C: Sistema de login
C: Programa que recebe 10 valores, calcule e escre...
C: Somar duas matrizes
C: Cifra de César
C: MDC
►
abril
(9)
►
março
(5)
Blogger news
RSS Feed
Insira o seu e-mail:
Marcadores
Android
(1)
Apostila
(2)
C
(16)
Dicas
(4)
Estrutura de dados
(1)
Humor
(6)
Java
(1)
Livros
(1)
Luciano
(1)
Luis Arturo
(1)
Notícias
(13)
Sistemas Digitais
(1)
Software
(15)
Sites Interessantes
Arquivos blog
Arquivos blog
junho (2)
maio (44)
abril (9)
março (5)
0 comentários:
Postar um comentário