Olá galera, boa tarde, sou novo na área de programação e tenho a seguinte questão
1 – Ajuste o algoritmo que implementa Lista Encadeada para:
a) Imprimir a lista da seguinte forma:
à | Posição | Elemento | Endereço de memória |
B) Permitir a inserção em qualquer posição da lista, bastando informar o elemento e a posição desejada para o mesmo.
c) Efetuar a remoção de qualquer elemento da lista, informando apenas a posição do elemento.
fiz este código
#include <stdio.h>
#include <conio.h>
#include <iostream>
#define N 10
typedef struct {
int Chave;
} TipoItem; //Cria o TipoItem como struct
typedef struct TipoCelulas *TipoApontador; //Cria apontador para TipoCelula
typedef struct TipoCelulas {
TipoItem Item;
TipoApontador Ant,Prox;
} TipoCelula[N]; //Cria TipoCelula como struct
void FLVazia (TipoCelula *Lista){
int i;
i = 1;
while(i <= 10) {
if (Lista[i]->prox != NULL)||(Lista[i]->ant != NULL){
Lista[i]->prox = NULL;
Lista[i]->ant = NULL;
Lista[i]->item = NULL;
i++;
}
}
int Vazia(TipoCelula *Lista) { //verifica se a lista está vazia
int i;
i = 1;
while(i <= 10) {
if (Lista[i]->prox != NULL)
if (Lista[0].prox==Lista[i].prox){
return (Lista[0].prox==Lista[i].prox);
break;
}
i++;
}
}
void Insere(ultimo, posicao, TipoItem x, TipoLista *Lista) {//Insere elemento na lista
Lista[posicao]->Ultimo->Prox=(TipoApontador) malloc(sizeof(TipoCelula));//Aloca dinamicamente em memoria espaco do tamanho TipoCelula para o ponteiro TipoApontador
if (ultimo != posicao)
Lista[posicao]->ant = &Lista[ultimo];
Lista[posicao]->item = x;
Lista[posicao]->prox = NULL;
}
void Retira(TipoApontador p, TipoLista *Lista, TipoItem *Item) { //Remove um elemento da lista
TipoApontador q; // Cria um apontador auxiliar
if(Vazia(*Lista)) { // Verifica se alista não está vazia
printf("Erro: Lista vazia ou posicao não existe\n");
return;
}
if (lista[posicao]->item == NULL)
printf("Erro: Posicao não existe\n");
else{
lista[posicao]->ant->prox = lista[posicao]->prox;
lista[posicao]->prox->ant = lista[posicao]->ant;
}
}
void Imprime(TipoLista Lista) { //Imprime o conteudo da lista
while(i <= 10) {
if (Lista[i]->item != NULL)
Printf("%d, ",i);
Printf("%d, ",Lista[i]->item);
Printf("%d\n",&Lista[i]);
}
i++;
TipoApontador Aux; //Cria um apontador auxiliar
Aux=Lista.Primeiro->Prox; //Atribui o endereco do primeiro elemento ao apontador
while(Aux!=NULL) {
printf("%d\n",Aux->Item.Chave); //Imprime o elemento para qual o apontador auxiliar aponta
Aux=Aux->Prox;//Atribui o endereco do proximo elemento ao apontador auxiliar
}
}
void BuscaERetira(int num, TipoLista Lista) { //Busca um determinado elemento e o remove da lista
TipoApontador Aux; //Cria um apontador auxiliar
Aux=Lista.Primeiro->Prox;//Atribui o endereco do primeiro elemento ao apontador
while(Aux!=NULL) { //Percorre a lista até o final dela
if(Aux->Item.Chave==num){ //Compara se é o elemento procurado da lista
printf("Elemento encontrado: %d\n",Aux->Item.Chave);
printf("Ponteiro para o elemento: %d\n",Aux);
Retira(Aux,&Lista,&Aux->Item);//Efetua a remocao do elemento identificado da lista
system("pause");
}
Aux=Aux->Prox; //Atualiza o ponteiro auxiliar para o proximo elemento da lista
}
}
int main() {
int t,opcao, ultimo, posicao;
TipoLista NumerosInteiros;
FLVazia(&NumerosInteiros);
ultimo = NULL;
do {
printf("Digite a opcao desejada ou 0 para sair:\n ");
printf("1 - Inserir elemento na lista\n ");
printf("2 - Remover elemento da lista\n ");
printf("3 - Exibir a lista\n");
scanf("%d", &opcao);
switch (opcao){
case 1:
TipoItem temp;
printf("Digite a posicao a inserir\n");
scanf("%d",&posicao);
printf("Digite o valor a inserir\n");
scanf("%d",&temp.Chave);
Insere(ultimo,Posicao,temp,&NumerosInteiros);
ultimo = posicao;
break;
case 2:
printf("Digite o valor a ser removido da lista\n");
scanf("%d",&t);
BuscaERetira(t,NumerosInteiros);
break;
case 3:
Imprime(NumerosInteiros);
system("pause");
break;
default:
printf("Tchau\n\n ");
system("pause");
break;
}
system("cls");
} while (opcao != 0);
return 0;
}
porém da erro do começo ao final e o problema é que eu não sei nada de programação e este é o trabalho mais importante do semestre, o que vale mais nota, tenho também o programa em que o professor deu de exemplo, se alguém quiser de coração me ajudar, posso passar o código fonte, conto com a ajuda de vocÊs abraços
Pergunta
tanure
Olá galera, boa tarde, sou novo na área de programação e tenho a seguinte questão
1 – Ajuste o algoritmo que implementa Lista Encadeada para:
a) Imprimir a lista da seguinte forma:
à | Posição | Elemento | Endereço de memória |
B) Permitir a inserção em qualquer posição da lista, bastando informar o elemento e a posição desejada para o mesmo.
c) Efetuar a remoção de qualquer elemento da lista, informando apenas a posição do elemento.
fiz este código
porém da erro do começo ao final e o problema é que eu não sei nada de programação e este é o trabalho mais importante do semestre, o que vale mais nota, tenho também o programa em que o professor deu de exemplo, se alguém quiser de coração me ajudar, posso passar o código fonte, conto com a ajuda de vocÊs abraços
Link para o comentário
Compartilhar em outros sites
1 resposta 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.