Академический Документы
Профессиональный Документы
Культура Документы
Aula 014
Listas Duplamente Encadeadas
Operaes com Listas Duplamente Encadeadas sem Header Inserindo elemento a esquerda da estrutura
void insere_esquerda(struct nodo **inicio, struct nodo **fim, int valor, int *status) { struct nodo *p; *status = 0; p = (struct nodo *) malloc(sizeof(struct nodo)); if (p != NULL) { p->dados = valor; p->anterior = NULL; p->proximo = *inicio; if (*inicio == NULL) { *fim = p; } else { (*inicio)->anterior = p; } *inicio = p; *status = 1; } }
21
33
52
Operaes com Listas Duplamente Encadeadas com Header Inserindo elemento antes do primeiro nodo ( esquerda)
void insere_esquerda(struct header *lista, int valor, int *status) struct nodo *p; *status = 0; if (lista != NULL) { p = (struct nodo *) malloc(sizeof(struct nodo)); if (p != NULL) { p->dados = valor; p->anterior = NULL; p->proximo = lista->inicio; if (lista->inicio == NULL) { lista->fim = p; } else { (lista->inicio)->anterior = p; } lista->inicio = p; lista->qtde = lista->qtde + 1; *status = 1; } } } {
Exerccios
Exerccio 1 Elabore um programa que permita a leitura de 10 valores inteiros e armazene em uma Lista Duplamente Encadeada com header (insere no incio da lista). Mostre os elementos existentes na lista. Aps a incluso dos elementos remova o primeiro elemento inserido na lista. Mostre os elementos existentes na lista Leia um novo valor, que deve ser inserido antes do nodo que contm o maior elemento da lista (escreva uma funo para descobrir o maior elemento da lista). Mostre o maior elemento da lista antes de incluir um novo elemento e depois de inserir o novo elemento. No final, mostre todos os valores armazenados na lista e ento a libere.
Exerccio 2 Escreva um procedimento que receba uma lista duplamente encadeada, com header, e troca o primeiro elemento com o ltimo, o segundo com o penltimo, e assim sucessivamente. O prottipo do procedimento : void comuta(struct header *Lista) Monte um programa para testar o procedimento acima, o qual dever receber n valores inteiros fornecidos pelo usurio, inserindo-os em uma lista duplamente encadeada com header. Mostre os elementos contidos na lista. Chame o procedimento comuta(). Mostre a lista resultante. Libere a lista e encerre o programa.
Exerccio 3 Escreva uma funo que receba duas listas duplamente encadeadas com header, L1 e L2, e retorne verdadeiro se os elementos da lista L1 esto contidos na lista L2, ou falso, em caso contrrio. O prottipo do procedimento : int esta_contido(struct header *L1, struct header *L2) Monte um programa para testar o procedimento acima, o qual dever receber do usurio n caracteres para compor a lista L1 e m caracteres para compor a lista L2. Mostre os elementos contidos nas duas listas. Teste se a lista L1 est contida em L2, emitindo uma mensagem apropriada. A seguir teste se a lista L2 esta continda em L1, emitindo uma mensagem apropriada. Libere as listas e encerre o programa.
Exerccio 4 Escreva uma funo que receba duas listas duplamente encadeadas com header, L1 e L2, e retorne uma nova lista encadeada duplamente com header ordenada contendo os valores de L1 e L2. A nova lista no deve conter repetio de elementos. A funo dever fazer a insero dos elementos na nova lista de forma ordenada, no pondendo ser utilizada nenhuma rotina de classificao disponibilizada pela linguagem, como qsort(), por exemplo. O prottipo do procedimento : struct header * uniao(struct header *L1, struct header *L2) Monte um programa para testar o procedimento acima, o qual dever receber do usurio n caracteres para compor a lista L1 e m caracteres para compor a lista L2. Mostre os elementos contidos nas duas listas. Chame a funo uniao() e mostre a lista resultante. Libere as listas e encerre o programa.
Exerccio 5 Escreva uma funo que receba duas listas duplamente encadeadas com header, L1 e L2, e retorne uma nova lista encadeada duplamente com header contendo a interseo de L1 e L2. O prottipo do procedimento : struct header * intersecao(struct header *L1, struct header *L2) Monte um programa para testar o procedimento acima, o qual dever receber do usurio n valores inteiros para compor a lista L1 e m valores inteiros para compor a lista L2. Mostre os elementos contidos nas duas listas. Chame a funo intersecao() e mostre a lista resultante. Libere as listas e encerre o programa.
Exerccio 6 Escreva uma funo que receba como parmetro uma lista L1 duplamente encadeada com header, contendo apenas caracteres, um valor inteiro positivo p representando a posio de um nodo da lista, e um inteiro positivo n representando uma quantidade de nodos. A funo dever retornar uma sublista contendo n elementos obtidos a partir do elemento na posio p da lista L1 (isto , p indica a partir de qual elemento a sublista dever ser computada). O prottipo do procedimento : struct header * subLista(struct header *L1, int p, int n) Monte um programa para testar o procedimento acima, o qual dever receber do usurio m caracteres para compor a lista L1. Mostre os elementos contidos nas duas listas. Receber do usurio a posio p do elemento inicial e o tamanho n da sublista a ser obtida de L1. Chame a funo subLista() e mostre a lista resultante. Libere as duas listas e encerre o programa.