codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
//Incluindo bibliotecas #include <stdlib.h> #include <stdio.h> //criando estrutura do nó da LLDE struct NOH{ int info; struct NOH *prox, *ant; }; //definindo o nó como um tipo de dado LLDE typedef struct NOH *LLDE; //função para inserir Nó no Inicio da LLDE void insInicioLLDE(LLDE *L, int vr) { //alocando novo nó LLDE N = (LLDE) malloc (sizeof(struct NOH)); //definindo ant como NULL, padrão do primeiro nó N -> ant = NULL; //definindo prox pra receber o primeiro nó da fila //caso a fila esteja vazia prox fica null, padrão para um nó só na LLDE N -> prox = *L; //info recebe o valor para esse primeiro nó N -> info = vr; //se a lista não for vazia if(*L != NULL) //o primeiro elemento da lista original recebe o novo no campo ant (*L) -> ant = N; //e a lista passa a apontar para o novo primeiro nó *L = N; } //Função para inserir no final void insFinalLLDE(LLDE *L, int vr) { //criando uma lista auxiliar, e alocando um novo nó na memória LLDE A, N = (LLDE) malloc (sizeof(struct NOH)); //novo nó no campo de próximo recebe null pois ele ficará no final N -> prox = NULL; //novo nó no campo de info recebe o valor deste novo nó N -> info = vr; //se a lista não for vazia if (*L) { //a lista auxiliar recebe a lista A = *L; //neste laço a lista auxiliar aponta para o último nó for(; A -> prox != NULL; A = A -> prox); //lista auxiliar no campo de próximo recebe o novo nó A -> prox = N; //novo nó no campo de ant recebe o último nó N -> ant = A; } //se a lista for vazia else { //Ela aponta pro novo nó *L = N; //campo de ant no novo nó é null N -> ant = NULL; } } // Remover o elemento inicial da lista void remInicioLLDE(LLDE *L) { //Criando lista auxiliar LLDE A; //se a lista não for vazia if(*L) { //lista auxiliar guarda a lista A = *L; //Lista passa a apontar pro próximo elemento da (*L) = A -> prox; //apagar o próximo nó free(A); //se a lista não for vazia if(*L) //primeiro nó da lista no campo de ant é NULL (*L) -> ant = NULL; } } // Remover o elemento final da lista void remFinalLLDE(LLDE *L) { //Criando lista auxiliar LLDE A, B; //se a lista não for vazia if(*L) { //a lista auxiliar recebe a lista A = *L; //neste laço a lista auxiliar aponta para o último nó for(; A -> prox != NULL; A = A -> prox); //Lista B preserva o penúltimo nó da Lista //se a lista só tiver um elemento B é null B = A -> ant; //apaga o último Nó apontado pela lista A free(A); //se B for NULL é porque a lista só tinha um nó if(B) //lista agora é vazia *L = NULL; //se B for um endereço de memória de algum nó, este será o último else //logo seu campo de prox deve ser NULL B -> prox = NULL; } } //Função para Ordenar LLDE em Ordem Crescente void ordernarLLDECresc(LLDE *L) { //Declarando listas auxiliares LLDE A = *L, B; //Declarando auxiliar para troca do valor de info int aux; //Declarando auxiliar para indicar se houve troca int troca = 1; //Lista vazia? if(*L) { //Lista B recebe Lista A no campo de próximo, para pegar o Nó seguinte B = A -> prox; //while para manter o laço for enquanto não houver mais trocas while(troca) { //zerando a variável de troca, caso não haja troca o while saberá troca = 0; //laço que percorre a LLDE mantendo B na frente de A for(A = *L; A -> prox != NULL; A = A -> prox, B = A -> prox) { //se o valor do nó anterior for maior que o posterior, troca if(A -> info > B -> info) { //trocando info aux = B -> info; B -> info = A -> info; A -> info = aux; //indicar que houve troca troca = 1; }//fim se }//fim for }//fim while } } int main() { system("Pause"); }
Private
[
?
]
Run code