Código
#include <iostream> #include <stdlib.h> #include <string.h> using namespace std; typedef struct tnodo *pnodo; typedef struct tnodo{ char dato; pnodo sig; }; typedef struct tlista{ pnodo inicio; pnodo final; }; char matrix[4][4]={{'a','b','c','d'},{'e','f','g','h'},{'i','j','k','l'},{'m','n','o','p'}}; void inicia(tlista &lista); void agregar_final(tlista &lista, pnodo nuevo); void copiarContenido(tlista &lista); void invertirLista(tlista &lista); void mostrar(tlista lista); int main() { tlista milista; pnodo nuevonodo; int opcion, num; inicia(milista); do{ system("cls"); cout << "*MATRIZ*" << endl; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ cout << matrix[i][j] << " "; } cout << endl; } cout << "1. Iniciar lista" << endl; cout << "2. Copiar contenido de la matriz a la lista" << endl; cout << "3. Invertir el orden de la lista" << endl; cout << "4. Mostrar lista" << endl; cout << "5. Salir" << endl; cin >> opcion; switch(opcion){ case 1: inicia(milista); break; case 2: copiarContenido(milista); break; case 3: invertirLista(milista); break; case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break; case 5: cout << "FIN DEL PROGRAMA" << endl; break; default: cout << "Opcion incorrecta" << endl; } system("pause"); }while(opcion!=5); } void inicia(tlista &lista) { lista.inicio=NULL; lista.final=NULL; } void agregar_final(tlista &lista, pnodo nuevo) { if(lista.inicio==NULL){ lista.inicio=nuevo; lista.final=nuevo; } else{ lista.final->sig=nuevo; lista.final=nuevo; } } void copiarContenido(tlista &lista) { pnodo nuevo; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ nuevo=new tnodo; if(nuevo!=NULL){ nuevo->dato=matrix[i][j]; nuevo->sig=NULL; } else{ cout << "MEMORIA INSUFICIENTE" << endl; } if(nuevo!=NULL){ agregar_final(lista,nuevo); } } } } void invertirLista(tlista &lista) { pnodo i, j; char buscado, aux; bool ordenado=true; buscado=lista.inicio->dato; while(ordenado){ if(lista.inicio->dato==buscado){ ordenado=false; } else{ for(i=lista.inicio;i->sig!=NULL;i=i->sig){ j=i->sig; aux=i->dato; i->dato=j->dato; j->dato=aux; } } } } void mostrar(tlista lista) { pnodo i; if(lista.inicio!=NULL){ for(i=lista.inicio;i!=NULL;i=i->sig){ cout << "Nodo: " << i->dato << endl; } cout << endl; } else{ cout << "LISTA VACIA" << endl; } }
Y una ultiam cosilla, debo hacer otro modulo donde debo liberar el espacio de memoria de todos los nodos , al pareceer debo hacerlo nodo por nodo o liberar todo el espacio en memoria ocupado por la lista completea si alguien sabe