#include <iostream>
using namespace std;
struct lista {
int info;
lista* prox;
};
void insere(lista* &ref, int valor) {
lista* novoNo = new lista;
if(!novoNo) {
cout << "Sem memoria disponivel!" << endl;
return;
}
novoNo->info = valor;
novoNo->prox = ref;
ref = novoNo;
cout << "Nodo com valor " << novoNo->info << " inserido." << endl;
}
void insere_fim(lista* &ref, int valor) {
lista* novoNo = new lista;
if(!novoNo) {
cout << "Sem memoria disponivel!" << endl;
return;
}
novoNo->info=valor;
novoNo->prox = nullptr;
if(ref == nullptr) ref = novoNo;
else {
lista* p = ref;
while(p->prox != nullptr)
p = p->prox;
p->prox = novoNo;
}
cout << "Nodo com valor " << novoNo->info << " inserido." << endl;
}
lista* criaLista() {
cout << "Lista criada." << endl;
return nullptr;
}
void imprime(lista *ref){
while (ref != nullptr){
cout << ref->info << " -> ";
ref = ref->prox;
}
cout << " / " << endl;
}
void menu(int* op, lista* ref) {
int valor, aux=1;
cout << "\033[2J\033[1;1H";
cout << " --- Lista encadeada ---\n" << endl;
while(true) {
cout << "\n 1- Criar lista 5- Inserir no fim da lista\n 2- Inserir nodo 6- Liberar memoria\n 3- Imprimir lista 7- Encerrar programa\n 4- Remover nodo\n\nSelecione uma acao: ";
cin >> *op;
if((aux==1) && ((*op!=1) && (*op!=7))) {
cout << "ERRO! Inicie o programa criando uma lista.\n";
continue;
}
switch (*op) {
case 1 :
ref=criaLista();
aux=0;
break;
case 2 : {
cout << "Valor do nodo: ";
cin >> valor;
insere(ref, valor);
break;
}
case 3 :
imprime(ref);
break;
case 4 : {
cout << "Valor do nodo: ";
cin >> valor;
/*ref=remove(ref, valor); */break;
}
case 5 : {
cout << "Valor do nodo: ";
cin >> valor;
insere_fim(ref, valor);
break;
}
case 6 : /*libera(&ref); */
break;
case 7 :
break;
default :
cout << "Acao invalida! Tente novamente." << endl;
}
if (*op==7) {
cout << "\n Fim do programa! :D ";
break;
}
}
}
int main () {
int op;
lista* ref;
menu(&op, ref);
}