Você foi designado para implementar um sistema bancário. Parte desta implementação é a criação de listas duplamente encadeadas em C.
A primeira lista deve conter as seguintes informações em cada nodo:
- dinheiro - crédito - dívida
Além destes atributos, a primeira lista conterá em cada nodo uma segunda lista.
A segunda lista conterá as seguintes informações:
- idade - peso - altura
A primeira lista conterá 4 nodos.
Sabendo que dentro de cada nodo da primeira lista temos outra lista (chamada de segunda lista), teremos ao total 5 listas. A segunda lista contida no primeiro nodo da primeira lista deverá ter 3 nodos.
A segunda lista contida no segundo nodo da primeira lista deverá ter 3 nodos.
A segunda lista contida no terceiro nodo da primeira lista deverá ter 2 nodos.
A segunda lista contida no quarto nodo da primeira lista deverá ter 5 nodos.
Após estruturar todas os elementos das listas você deve: 1) Apresentar a lista principal (primeira lista); 2) Apresentar as quatro listas secundárias (secunda lista); 3) Remover o elemento 2 da lista contida no nodo 4 dentro da lista principal; 4) Exibir a lista principal inversa; 5) Exibir as 4 listas secundárias inversas
#include<stdlib.h>
#include<stdio.h>
typedef struct No{
int idade;
int peso;
int altura;
struct No *proximo;
struct No *anterior;
} No;
typedef struct No1{
float dinheiro;
float credito;
float divida;
struct No1 *proximo;
struct No1 *anterior;
} No1;
No * criar_listaexterna(int idade, int peso, int altura){
printf("===LISTA 1===");
No *novo;
novo = (No *) malloc(sizeof(No));
novo->idade = idade;
novo->peso = peso;
novo->altura = altura;
novo->proximo = NULL;
novo->anterior = NULL;
return novo;
}
No1 * criar_listainterna(float dinheiro, float credito, float divida){
No1 *novo;
novo = (No1 *) malloc(sizeof(No1));
novo->dinheiro = dinheiro;
novo->credito = credito;
novo->divida = divida;
novo->proximo = NULL;
novo->anterior = NULL;
return novo;
}
//Funcao abaixo insere no inicio da lista
No * insere_primeiro(No * lista, No * novo){
if (lista != NULL){
lista->anterior = novo;
novo->proximo = lista;
}
return novo;
}
No * retorna_ultimo_da_lista(No * lista){
while (lista->proximo != NULL){
lista = lista->proximo;
}
return lista;
}
No * insere_ultimo(No * lista, No * novo){
if (lista != NULL) {
No * n = retorna_ultimo_da_lista(lista);
n->proximo = novo;
novo->anterior = n;
return lista;
}else{
return novo;
}
}
void apresenta_lista(No * lista){
//Percorrendo os elementos da lista
int cont = 0;
while (lista != NULL){
printf("Idade %d, peso %d, altura %d\n", lista->idade, lista->peso, lista->altura);
cont++;
lista = lista->proximo;
}
}
void apresenta_listainterna(No1 * lista){
//Percorrendo os elementos da lista
int cont = 0;
while (lista != NULL){
printf("Valor %f, Credito %f, Divida %f\n", lista->dinheiro, lista->credito, lista->divida);
cont++;
lista = lista->proximo;
}
}
void apresenta_lista_inversa(No * lista){
int cont = 0;
No * ultimo = retorna_ultimo_da_lista(lista);
system("pause");
while (ultimo != NULL){
printf("Idade %d, peso %d, altura %d\n", ultimo->idade, ultimo->peso, ultimo->altura);
cont++;
ultimo = ultimo->anterior;
}
}
No * remove_elemento(No * lista, int posicao){
if (lista != NULL){
// printf("Removendo NULL \n");
No * aux = lista;
//exclusao lista
if (posicao == 1){
lista = lista->proximo;
//Se nao for o ultimo elemento da lista
if (lista != NULL){
lista->anterior = NULL;
}
}else{
int cont = 1;
while (aux != NULL && cont < posicao) {
aux = aux->proximo;
cont++;
}
if (aux == NULL){
printf("A lista nao tem %d elementos \n", posicao);
return lista;
}
aux->anterior->proximo = aux->proximo;
//exclusão do último não necessita atualizar a referencia de um elemento posterior
if (aux->proximo != NULL){
aux->proximo->anterior = aux->anterior;
}
}
free(aux);
}else{
printf("A lista esta vazia! \n");
}
return lista;
}
No * insere_na_lista(No * lista, No * novo, int posicao){
No * aux = lista;
//Inclusão no inicio
if (lista == NULL || posicao == 1){
lista = insere_primeiro(lista, novo);
}else{
int cont = 1;
while (aux->proximo != NULL && cont < posicao) {
aux = aux->proximo;
cont++;
}
//Inclusão no último
if (aux->proximo == NULL){
insere_ultimo(lista, novo);
}else{
//inclusão em outro ponto
int main() {
// Criando referencia para a lista
No *lista = NULL;
// criar um lista apontada por n com o primerio elemento
No *n = criar_listaexterna(18, 75, 179);
No *n2 = criar_listaexterna(22, 84,180);
No *n3 = criar_listaexterna(30, 90, 190);
No *n4 = criar_listaexterna(55, 76, 178);
No1 *m = criar_listainterna(18, 75, 179);
No1 *m2 = criar_listainterna(22, 84,180);
No1 *m3 = criar_listainterna(30, 90, 190);
No1 *m4 = criar_listainterna(55, 76, 178);
No1 *m5 = criar_listainterna(28, 74, 186);
No1 *m6 = criar_listainterna(16, 69, 175);
printf("Inserindo na ultima posicao da lista os elementos n2, n3 e n4 \n");
lista = insere_ultimo(lista, n2);
lista = insere_ultimo(lista, n3);
lista = insere_ultimo(lista, n4);
apresenta_lista(lista);
system("PAUSE");
printf("Inserindo na ultima posicao da lista os elementos n2, n3 e n4 \n");
lista = insere_ultimo(lista, m2);
lista = insere_ultimo(lista, m3);
lista = insere_ultimo(lista, m4);
apresenta_listainterna(lista);
system("PAUSE");
printf("Inserindo n5 como primeiro elemento da lista. \n");
lista = insere_primeiro(lista, n4);
apresenta_lista(lista);
system("PAUSE");
printf("Removendo o elemento da posicao 4 da lista. \n");
lista = remove_elemento(lista, 4);
apresenta_lista(lista);
system("PAUSE");
printf("Apresentado a lista em ordem inversa. \n");
apresenta_lista_inversa(lista);
system("PAUSE");
printf("Inserindo n6 na posicao 2 da lista. \n");
lista = insere_na_lista(lista, n4, 2);
apresenta_lista(lista);
system("PAUSE");
printf("Apresentado a lista em ordem inversa. \n");
apresenta_lista_inversa(lista);
system("PAUSE");
printf("Removendo 4 \n");
lista = remove_elemento(lista, 4);
apresenta_lista(lista);
system("PAUSE");
printf("Removendo 3 \n");
lista = remove_elemento(lista, 3);
apresenta_lista(lista);
printf("Removendo 2 \n");
lista = remove_elemento(lista, 2);
apresenta_lista(lista);
printf("Removendo 1 \n");
lista = remove_elemento(lista, 1);
apresenta_lista(lista);
system("PAUSE");
}
Pergunta
cristiano m
alguém poderia me dar um help
Você foi designado para implementar um sistema bancário. Parte desta implementação é a criação de listas duplamente encadeadas em C.
A primeira lista deve conter as seguintes informações em cada nodo:
- dinheiro - crédito - dívida
Além destes atributos, a primeira lista conterá em cada nodo uma segunda lista.
A segunda lista conterá as seguintes informações:
- idade - peso - altura
A primeira lista conterá 4 nodos.
Sabendo que dentro de cada nodo da primeira lista temos outra lista (chamada de segunda lista), teremos ao total 5 listas. A segunda lista contida no primeiro nodo da primeira lista deverá ter 3 nodos.
A segunda lista contida no segundo nodo da primeira lista deverá ter 3 nodos.
A segunda lista contida no terceiro nodo da primeira lista deverá ter 2 nodos.
A segunda lista contida no quarto nodo da primeira lista deverá ter 5 nodos.
Após estruturar todas os elementos das listas você deve: 1) Apresentar a lista principal (primeira lista); 2) Apresentar as quatro listas secundárias (secunda lista); 3) Remover o elemento 2 da lista contida no nodo 4 dentro da lista principal; 4) Exibir a lista principal inversa; 5) Exibir as 4 listas secundárias inversas
#include<stdlib.h>
#include<stdio.h>
typedef struct No{
int idade;
int peso;
int altura;
struct No *proximo;
struct No *anterior;
} No;
typedef struct No1{
float dinheiro;
float credito;
float divida;
struct No1 *proximo;
struct No1 *anterior;
} No1;
No * criar_listaexterna(int idade, int peso, int altura){
printf("===LISTA 1===");
No *novo;
novo = (No *) malloc(sizeof(No));
novo->idade = idade;
novo->peso = peso;
novo->altura = altura;
novo->proximo = NULL;
novo->anterior = NULL;
return novo;
}
No1 * criar_listainterna(float dinheiro, float credito, float divida){
No1 *novo;
novo = (No1 *) malloc(sizeof(No1));
novo->dinheiro = dinheiro;
novo->credito = credito;
novo->divida = divida;
novo->proximo = NULL;
novo->anterior = NULL;
return novo;
}
//Funcao abaixo insere no inicio da lista
No * insere_primeiro(No * lista, No * novo){
if (lista != NULL){
lista->anterior = novo;
novo->proximo = lista;
}
return novo;
}
No * retorna_ultimo_da_lista(No * lista){
while (lista->proximo != NULL){
lista = lista->proximo;
}
return lista;
}
No * insere_ultimo(No * lista, No * novo){
if (lista != NULL) {
No * n = retorna_ultimo_da_lista(lista);
n->proximo = novo;
novo->anterior = n;
return lista;
}else{
return novo;
}
}
void apresenta_lista(No * lista){
//Percorrendo os elementos da lista
int cont = 0;
while (lista != NULL){
printf("Idade %d, peso %d, altura %d\n", lista->idade, lista->peso, lista->altura);
cont++;
lista = lista->proximo;
}
}
void apresenta_listainterna(No1 * lista){
//Percorrendo os elementos da lista
int cont = 0;
while (lista != NULL){
printf("Valor %f, Credito %f, Divida %f\n", lista->dinheiro, lista->credito, lista->divida);
cont++;
lista = lista->proximo;
}
}
void apresenta_lista_inversa(No * lista){
int cont = 0;
No * ultimo = retorna_ultimo_da_lista(lista);
system("pause");
while (ultimo != NULL){
printf("Idade %d, peso %d, altura %d\n", ultimo->idade, ultimo->peso, ultimo->altura);
cont++;
ultimo = ultimo->anterior;
}
}
No * remove_elemento(No * lista, int posicao){
if (lista != NULL){
// printf("Removendo NULL \n");
No * aux = lista;
//exclusao lista
if (posicao == 1){
lista = lista->proximo;
//Se nao for o ultimo elemento da lista
if (lista != NULL){
lista->anterior = NULL;
}
}else{
int cont = 1;
while (aux != NULL && cont < posicao) {
aux = aux->proximo;
cont++;
}
if (aux == NULL){
printf("A lista nao tem %d elementos \n", posicao);
return lista;
}
aux->anterior->proximo = aux->proximo;
//exclusão do último não necessita atualizar a referencia de um elemento posterior
if (aux->proximo != NULL){
aux->proximo->anterior = aux->anterior;
}
}
free(aux);
}else{
printf("A lista esta vazia! \n");
}
return lista;
}
No * insere_na_lista(No * lista, No * novo, int posicao){
No * aux = lista;
//Inclusão no inicio
if (lista == NULL || posicao == 1){
lista = insere_primeiro(lista, novo);
}else{
int cont = 1;
while (aux->proximo != NULL && cont < posicao) {
aux = aux->proximo;
cont++;
}
//Inclusão no último
if (aux->proximo == NULL){
insere_ultimo(lista, novo);
}else{
//inclusão em outro ponto
aux->anterior->proximo = novo;
novo->proximo = aux;
novo->anterior = aux->anterior;
aux->anterior = novo;
}
}
return lista;
}
int main() {
// Criando referencia para a lista
No *lista = NULL;
// criar um lista apontada por n com o primerio elemento
No *n = criar_listaexterna(18, 75, 179);
No *n2 = criar_listaexterna(22, 84,180);
No *n3 = criar_listaexterna(30, 90, 190);
No *n4 = criar_listaexterna(55, 76, 178);
No1 *m = criar_listainterna(18, 75, 179);
No1 *m2 = criar_listainterna(22, 84,180);
No1 *m3 = criar_listainterna(30, 90, 190);
No1 *m4 = criar_listainterna(55, 76, 178);
No1 *m5 = criar_listainterna(28, 74, 186);
No1 *m6 = criar_listainterna(16, 69, 175);
printf("Inserindo na ultima posicao da lista os elementos n2, n3 e n4 \n");
lista = insere_ultimo(lista, n2);
lista = insere_ultimo(lista, n3);
lista = insere_ultimo(lista, n4);
apresenta_lista(lista);
system("PAUSE");
printf("Inserindo na ultima posicao da lista os elementos n2, n3 e n4 \n");
lista = insere_ultimo(lista, m2);
lista = insere_ultimo(lista, m3);
lista = insere_ultimo(lista, m4);
apresenta_listainterna(lista);
system("PAUSE");
printf("Inserindo n5 como primeiro elemento da lista. \n");
lista = insere_primeiro(lista, n4);
apresenta_lista(lista);
system("PAUSE");
printf("Removendo o elemento da posicao 4 da lista. \n");
lista = remove_elemento(lista, 4);
apresenta_lista(lista);
system("PAUSE");
printf("Apresentado a lista em ordem inversa. \n");
apresenta_lista_inversa(lista);
system("PAUSE");
printf("Inserindo n6 na posicao 2 da lista. \n");
lista = insere_na_lista(lista, n4, 2);
apresenta_lista(lista);
system("PAUSE");
printf("Apresentado a lista em ordem inversa. \n");
apresenta_lista_inversa(lista);
system("PAUSE");
printf("Removendo 4 \n");
lista = remove_elemento(lista, 4);
apresenta_lista(lista);
system("PAUSE");
printf("Removendo 3 \n");
lista = remove_elemento(lista, 3);
apresenta_lista(lista);
printf("Removendo 2 \n");
lista = remove_elemento(lista, 2);
apresenta_lista(lista);
printf("Removendo 1 \n");
Editado por cristiano mlista = remove_elemento(lista, 1);
apresenta_lista(lista);
system("PAUSE");
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.