Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- //lista duplamente encadeada
- typedef struct elemento Elemento;
- struct elemento{
- int info;
- Elemento* prox;
- Elemento* ant;
- };
- Elemento* lista_cria(void){
- return NULL;
- }
- //insere no começo da lista
- Elemento* lista_insere(Elemento* inicio,int val){
- Elemento* novo = (Elemento*)malloc(sizeof(Elemento));
- novo->prox = NULL;
- novo->ant = NULL;
- novo->info = val; //coloca o valor antes do primeiro (que é o "lista")
- if(inicio==NULL){ //se a lista for nula, ou seja, se o elemento que colocou for o unico,
- return novo; //então retorna ele, que vai ser a lista na main
- }
- else{
- novo->prox = inicio;
- inicio->ant = novo;
- }
- return novo;
- }
- //insere no fim da lista - ver: http://www.cprogressivo.net/2013/10/Lista-simplesmente-encadeada-com-cabeca-em-C-Inserindo-nos-no-inicio-e-fim.html
- Elemento* lista_insere_fim(Elemento* fim, int val){
- Elemento* novo = (Elemento*)malloc(sizeof(Elemento));
- novo->info = val; //coloca o valor na struct
- novo->prox = NULL; //e o proximo dele vai ser NULL (pq quando o proximo é NULL é pq ele está na ultima posicao)
- novo->ant = NULL;
- if(fim==NULL){ //se a lista for nula, ou seja, se o elemento que colocou for o unico,
- return novo; //então retorna ele, que vai ser a lista na main
- }
- else{ //se tiver mais elementos na lista antes de adicionar esse
- fim->prox = novo; //fim->prox é o ultimo, so que agr o novo que quer adicionar que deve ser o ultimo
- novo->ant = fim; //o anterior ao novo (que agr é o ultimo) vai receber o fim antigo
- }
- return novo; //retorna o novo que agr é o novo fim (pq na main recebe o fim)
- }
- //função imprime: imprime os valores dos elementos
- void lista_imprime(Elemento* inicio){
- Elemento* p;
- if(inicio==NULL){
- printf("\n-----Lista Vazia!-----\n");
- }
- for(p=inicio;p!=NULL;p=p->prox){
- printf("valor = %d\n", p->info);
- }
- system("pause");
- }//fim da função imprime
- int main(){
- Elemento* inicio; //é a lista em si
- Elemento* fim;
- inicio = lista_cria();
- fim = lista_cria();
- printf("\n-----Inserir no começo-----\n");
- inicio = lista_insere(inicio, 20);
- fim=inicio;
- inicio = lista_insere(inicio, 30);
- inicio = lista_insere(inicio, 40);
- lista_imprime(inicio);
- printf("\n-----Inserir no fim da lista-----\n");
- fim = lista_insere_fim(fim, 22);
- fim = lista_insere_fim(fim, 33);
- fim = lista_insere_fim(fim, 44);
- lista_imprime(inicio);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement