0
Hello.
I’m trying to learn about pointers and lists and I made a code that contains a menu and the option to enter as many values as I want. I made the code in the most recent codeblocks using W10 and it worked well as it is, but I tested it on other pcs and on a Ubuntu and saw that it did not compile very well.
When selecting option 2, in other pcs the execution would stop, and in Ubuntu the menu would reappear without running the function. If you can help me, I’d appreciate it.
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct lista{
int elemento; /* componente da lista */
struct lista *proximo; /* Aponta para a proxima posicao de mémoria*/
}lista;
lista *primeiro, *atual, *NovaLista, *LiberaMemoria; /* Variaveis de manipulacao da lista*/
void ExcluiElemento();
void CriaLista();
void Imprimir();
void InserirElemento();
void liberamemoria(int numero);
int main(){
int opcao;
do{
cout<<"1------------Criar Lista\n"
<<"2------------Inserir Elemento na lista\n"
<<"3-----------Imprimir Elementos da lista\n"
<<"4------------Exlcuir Elementos da lista \n\n";
cin>>opcao;
switch(opcao){
case 1:
CriaLista();
break;
case 2:
InserirElemento();
break;
case 3:
Imprimir();
break;
case 4:
ExcluiElemento();
break;
}
}while(opcao != 5);
return 0;
}
void liberamemoria(int numero){
atual=primeiro;
LiberaMemoria=primeiro;
while(LiberaMemoria!=NULL){
if(LiberaMemoria->elemento != numero){
atual=LiberaMemoria;
LiberaMemoria=LiberaMemoria-> proximo;
}else{
if(LiberaMemoria==atual){
primeiro = atual->proximo;
liberamemoria(numero);
break;
}else if(LiberaMemoria->proximo==NULL){
atual->proximo=NULL;
break;
}else{
atual->proximo=LiberaMemoria->proximo;
liberamemoria(numero);
break;
}
}
}
free(LiberaMemoria);
}
void ExcluiElemento(){
int numero;
if(primeiro==NULL){
cout<<"Lista vazia\n\n";
}else{
cout<<" Digite o elemento que deseja excluir da lista: ";
cin>>numero;
liberamemoria(numero);
}
}
void CriaLista(){
if(primeiro==NULL){
primeiro=(struct lista *)malloc(sizeof(lista)); /* Cria um nó na lista*/
cout<<"lista criada com sucesso. \n\n";
}else{
cout << "lista ja criada. \n\n";
}
}
void Imprimir(){
if(primeiro==NULL){
cout<<" lista vazia";
}else{
atual=primeiro;
cout<< "Elementos Inseridos na Lista\n\n";
while(atual!=NULL){
cout<<atual->elemento<< "\n\n";
atual=atual->proximo;
}
}
}
void InserirElemento(){
int i;
atual=primeiro;
if(atual==NULL){ /* Verifica se a lista foi criada*/
cout << "lista ainda nao criada \n\n";
}else{
while(i!=0){
while(atual->proximo!=NULL){
atual=atual->proximo;
}
cout<<"Insira um elemento na lista: \t";
cin>>atual->elemento;
cout<<"\n";
cout<<"deseja inserir outro elemento na lista 1/0: \t";
cin>>i;
if(i==1){
NovaLista=(lista*)malloc(sizeof(lista));
atual->proximo=NovaLista;
}
cout<<"\n";
}
}
}