Vous êtes sur la page 1sur 29

Estructura de Datos

1 EJEMPLO
#include <iostream>
using namespace std;

struct Nodo{
int dato;
Nodo *sgt;
};

int main(int argc, char *argv[]) {


Nodo *lista = NULL;

cout<<"Numero de elementos a insertar: ";


int n;
cin>>n;
for(int i = 0; i < n; i++){
cout<<"valor "<<i+1<<": ";
int valor;
cin>>valor;
Nodo *p = new (Nodo);
p->dato = valor;
p->sgt = lista;
lista = p;
}
Nodo *p = lista;
cout<<endl;
while(p != NULL){
cout<<p->dato<<"\t";
p = p->sgt;
}
cout<<endl;

return 0;
}

2 EJEMPLO
#include <iostream>
using namespace std;

struct Nodo{
int dato;
Nodo *sgt;
};

void insertaIni(Nodo *lista, int valor);


int main(int argc, char *argv[]) {
Nodo *lista = NULL;

cout<<"Numero de elementos a insertar: ";


int n;
cin>>n;
for(int i = 0; i < n; i++){
cout<<"valor "<<i+1<<": ";
int valor;
cin>>valor;
insertaIni(lista, valor);
}

return 0;
}

void insertaIni(Nodo *lista, int valor){


Nodo *p = new (Nodo);
p->dato = valor;
p->sgt = lista;
lista = p;
}

3 EJEMPLO
#include <iostream>
using namespace std;
struct Nodo{
int dato;
Nodo *sgt;
};

typedef Nodo* pNodo;

void insertaIni(pNodo &lista, int v);


void mostrarLis(pNodo lista);

int main(int argc, char *argv[]) {


cout<<"numero de elementos a insertar: ";
int n;
cin>>n;

pNodo listita = NULL;

for (int i=0;i<n;i++) {


cout<<"Dato "<<i+1<<": ";
int valor;
cin>>valor;
insertaIni(listita, valor);
}

mostrarLis(listita);
return 0;
}
void mostrarLis(pNodo lista){
cout<<endl;
while(lista != NULL){
cout<<lista->dato<<"\t";
lista = lista->sgt;
}
cout<<endl;
}
void insertaIni(pNodo &lista, int v){
pNodo p = new(Nodo);
p->dato = v;
p->sgt = lista;
lista = p;
}

4 EJEMPLO
#include <iostream>
using namespace std;
struct Nodo{
int dato;
Nodo *sgt;
};

typedef Nodo* pNodo;

void eliminaIni(pNodo &lista);


void eliminaPos(pNodo &lista, int pos);
void insertaIni(pNodo &lista, int v);
void insertaFin(pNodo &lista, int v);
void mostrarLis(pNodo lista);
bool estaVacia(pNodo lista);
void insertaPos(pNodo &lista,int v, int pos);
int main(int argc, char *argv[]) {
cout<<"numero de elementos a insertar: ";
int n;
cin>>n;

pNodo listita = NULL;

int valor;
for (int i=0;i<n;i++) {
cout<<"Dato "<<i+1<<": ";

cin>>valor;
insertaFin(listita, valor);
}

mostrarLis(listita);
cout<<"posicion a insertar : ";
int pos;
cin>>pos;
cout<<"Dato : ";
cin>>valor;
insertaPos(listita,valor,pos);
mostrarLis(listita);

cout<<"Elimina el primer nodo..."<<endl;


eliminaIni(listita);
mostrarLis(listita);

cout<<"Elimina el primer nodo..."<<endl;


eliminaIni(listita);
mostrarLis(listita);

cout<<"Posicion a eliminar: "<<endl;


cin>>pos;
eliminaPos(listita,pos);
mostrarLis(listita);
return 0;
}
void eliminaIni(pNodo &lista){
if (!estaVacia(lista)) {
pNodo p = lista;
lista = lista->sgt;
delete(p);
}
}
//REVISAR ESTE PROCEDIMIENTO
void eliminaPos(pNodo &lista, int pos){
pNodo anterior = lista;
for(int i = 1; anterior != NULL; i++){
if(i == pos -1){
pNodo p = anterior->sgt;
anterior->sgt = p->sgt;
delete(p);
return;
}
anterior = anterior->sgt;
}
}
bool estaVacia(pNodo lista){
return lista == NULL;
}
void insertaIni(pNodo &lista, int v, int pos){

}
void insertaFin(pNodo &lista, int v){
pNodo p = new(Nodo);
p->dato = v;
if (estaVacia(lista)) {
p->sgt = NULL;
lista = p;
} else {
pNodo anterior = lista;
while (anterior->sgt != NULL) {
anterior = anterior->sgt;
}
p->sgt = NULL;
anterior->sgt = p;
}
}
void mostrarLis(pNodo lista){
cout<<endl;
while(lista != NULL){
cout<<lista->dato<<"\t";
lista = lista->sgt;
}
cout<<endl;
}
void insertaIni(pNodo &lista, int v){
pNodo p = new(Nodo);
p->dato = v;
p->sgt = lista;
lista = p;
}

void insertaPos(pNodo &lista,int v, int pos){


if (pos == 1) {
insertaIni(lista, v);
} else {
pNodo p=new Nodo();
p->dato=v;
pNodo anterior=lista;
for(int i=1;anterior!=NULL;i++){
if(i==pos-1){
p->sgt=anterior->sgt;
anterior->sgt=p;
return;
}
anterior=anterior->sgt;
}
}
}

5 EJEMPLO
#include <iostream>
#include <cstdlib>
using namespace std;
struct Nodo{
int dato;
Nodo *sgt;
};

typedef Nodo* pNodo;

void eliminaIni(pNodo &lista);


void eliminaFin(pNodo &lista);
void eliminaPos(pNodo &lista, int pos);
void insertaIni(pNodo &lista, int v);
void insertaFin(pNodo &lista, int v);
void mostrarLis(pNodo lista);
bool estaVacia(pNodo lista);
void insertaPos(pNodo &lista,int v, int pos);
int main(int argc, char *argv[]) {
cout<<"numero de elementos a insertar: ";
int n;
cin>>n;

pNodo listita = NULL;

int valor;
for (int i=0;i<n;i++) {
cout<<"Dato "<<i+1<<": ";

cin>>valor;
insertaFin(listita, valor);
}

mostrarLis(listita);
cout<<"posicion a insertar : ";
int pos;
cin>>pos;
cout<<"Dato : ";
cin>>valor;
insertaPos(listita,valor,pos);
mostrarLis(listita);

cout<<"Posicion a eliminar: "<<endl;


cin>>pos;
eliminaPos(listita,pos);
mostrarLis(listita);

cout<<"Elimina el ultimo nodo..."<<endl;


eliminaFin(listita);
mostrarLis(listita);

cout<<"Elimina el ultimo nodo..."<<endl;


eliminaFin(listita);
mostrarLis(listita);

return 0;
}
//
void eliminaFin(pNodo &lista){
if (!estaVacia(lista)) {
pNodo anterior = NULL;
pNodo p = lista;
while(p->sgt != NULL){
anterior = p;
p = p ->sgt;
}
anterior->sgt = NULL;
delete(p);
}
}
void eliminaIni(pNodo &lista){
if (!estaVacia(lista)) {
pNodo p = lista;
lista = lista->sgt;
delete(p);
}
}

void eliminaPos(pNodo &lista, int pos){


if (pos == 1) {
eliminaIni(lista);
} else {
pNodo anterior = lista;
for(int i = 1; anterior != NULL; i++){
if(i == pos -1){
pNodo p = anterior->sgt;
anterior->sgt = p->sgt;
delete(p);
return;
}
anterior = anterior->sgt;
}
}

}
bool estaVacia(pNodo lista){
return lista == NULL;
}

void insertaFin(pNodo &lista, int v){


pNodo p = new(Nodo);
p->dato = v;
if (estaVacia(lista)) {
p->sgt = NULL;
lista = p;
} else {
pNodo anterior = lista;
while (anterior->sgt != NULL) {
anterior = anterior->sgt;
}
p->sgt = NULL;
anterior->sgt = p;
}
}
void mostrarLis(pNodo lista){
if (!estaVacia(lista)){
cout<<endl;
while(lista != NULL){
cout<<lista->dato<<"\t";
lista = lista->sgt;
}
cout<<endl;
} else {
cout<<" ***Lista vacia***"<<endl;
cout<<endl;
}

}
void insertaIni(pNodo &lista, int v){
pNodo p = new(Nodo);
p->dato = v;
p->sgt = lista;
lista = p;
}

void insertaPos(pNodo &lista,int v, int pos){


if (pos == 1) {
insertaIni(lista, v);
} else {
pNodo p=new Nodo();
p->dato=v;
pNodo anterior=lista;
for(int i=1;anterior!=NULL;i++){
if(i==pos-1){
p->sgt=anterior->sgt;
anterior->sgt=p;
return;
}
anterior=anterior->sgt;
}
}
}

6 EJEMPLO
#include <iostream>
#include <cstdlib>
using namespace std;
struct Nodo{
int dato;
Nodo *sgt;
};

typedef Nodo* pNodo;

void eliminaAll(pNodo &lista);


void eliminaIni(pNodo &lista);
void eliminaFin(pNodo &lista);
void eliminaPos(pNodo &lista, int pos);
void insertaIni(pNodo &lista, int v);
void insertaFin(pNodo &lista, int v);
void mostrarLis(pNodo lista);
bool estaVacia(pNodo lista);
void insertaPos(pNodo &lista,int v, int pos);
void busqueda(pNodo lista, int x);
void ordenar(pNodo lista);

int main(int argc, char *argv[]) {


cout<<"numero de elementos a insertar: ";
int n;
cin>>n;

pNodo listita = NULL;


int valor;
for (int i=0;i<n;i++) {
cout<<"Dato "<<i+1<<": ";

cin>>valor;
insertaFin(listita, valor);
}

mostrarLis(listita);
cout<<"posicion a insertar : ";
int pos;
cin>>pos;
cout<<"Dato : ";
cin>>valor;
insertaPos(listita,valor,pos);
mostrarLis(listita);

cout<<"Posicion a eliminar: "<<endl;


cin>>pos;
eliminaPos(listita,pos);
mostrarLis(listita);

cout<<"Elimina el ultimo nodo..."<<endl;


eliminaFin(listita);
mostrarLis(listita);

cout<<"Elimina el ultimo nodo..."<<endl;


eliminaFin(listita);
mostrarLis(listita);

/*cout<<"elimina toda la lista"<<endl;


eliminaAll(listita);
mostrarLis(listita);*/

cout<<"Elemento a buscar: ";


int x;
cin>>x;
busqueda(listita,x);

return 0;
}
void ordenar(pNodo lista){
pNodo i = lista;
pNodo j = i->sgt;
while (lista != NULL) {

}
}
void busqueda(pNodo lista, int x){
bool encontrado = false;
int i=1;
while (lista != NULL) {
if (lista->dato == x) {
cout<<"encontrado en "<<i<<endl;
encontrado = true;
}
i++;
lista = lista->sgt;
}
if(encontrado == false){
cout<<"NO encontrado"<<endl;
}

void eliminaAll(pNodo &lista){


while (lista != NULL) {
pNodo p = lista;
lista = lista->sgt;
delete(p);
}
}

void eliminaFin(pNodo &lista){


if (!estaVacia(lista)) {
if (lista->sgt == NULL) {
eliminaIni(lista);
} else {
pNodo anterior = NULL;
pNodo p = lista;
while(p->sgt != NULL){
anterior = p;
p = p ->sgt;
}
anterior->sgt = NULL;
delete(p);
}

}
}
void eliminaIni(pNodo &lista){
if (!estaVacia(lista)) {
pNodo p = lista;
lista = lista->sgt;
delete(p);
}
}

void eliminaPos(pNodo &lista, int pos){


if (pos == 1) {
eliminaIni(lista);
} else {
pNodo anterior = lista;
for(int i = 1; anterior->sgt != NULL; i++){
if(i == pos -1){
pNodo p = anterior->sgt;
anterior->sgt = p->sgt;
delete(p);
return;
}
anterior = anterior->sgt;
}
}
}
bool estaVacia(pNodo lista){
return lista == NULL;
}

void insertaFin(pNodo &lista, int v){


pNodo p = new(Nodo);
p->dato = v;
if (estaVacia(lista)) {
p->sgt = NULL;
lista = p;
} else {
pNodo anterior = lista;
while (anterior->sgt != NULL) {
anterior = anterior->sgt;
}
p->sgt = NULL;
anterior->sgt = p;
}
}
void mostrarLis(pNodo lista){
if (!estaVacia(lista)){
cout<<endl;
while(lista != NULL){
cout<<lista->dato<<"\t";
lista = lista->sgt;
}
cout<<endl;
} else {
cout<<" ***Lista vacia***"<<endl;
cout<<endl;
}

}
void insertaIni(pNodo &lista, int v){
pNodo p = new(Nodo);
p->dato = v;
p->sgt = lista;
lista = p;
}

void insertaPos(pNodo &lista,int v, int pos){


if (pos == 1) {
insertaIni(lista, v);
} else {
pNodo p=new Nodo();
p->dato=v;
pNodo anterior=lista;
for(int i=1;anterior!=NULL;i++){
if(i==pos-1){
p->sgt=anterior->sgt;
anterior->sgt=p;
return;
}
anterior=anterior->sgt;
}
}
}

7 EJEMPLO
#include <iostream>
#include <cstdlib>
using namespace std;
struct Nodo{
int dato;
Nodo *sgt;
};

typedef Nodo* pNodo;

void eliminaAll(pNodo &lista);


void eliminaIni(pNodo &lista);
void eliminaFin(pNodo &lista);
void eliminaPos(pNodo &lista, int pos);
void insertaIni(pNodo &lista, int v);
void insertaFin(pNodo &lista, int v);
void mostrarLis(pNodo lista);
bool estaVacia(pNodo lista);
void insertaPos(pNodo &lista,int v, int pos);
void busqueda(pNodo lista, int x);
void ordenar(pNodo lista);

int main(int argc, char *argv[]) {


cout<<"numero de elementos a insertar: ";
int n;
cin>>n;

pNodo listita = NULL;

int valor;
for (int i=0;i<n;i++) {
cout<<"Dato "<<i+1<<": ";

cin>>valor;
insertaFin(listita, valor);
}

mostrarLis(listita);
cout<<"posicion a insertar : ";
int pos;
cin>>pos;
cout<<"Dato : ";
cin>>valor;
insertaPos(listita,valor,pos);
mostrarLis(listita);

cout<<"Posicion a eliminar: "<<endl;


cin>>pos;
eliminaPos(listita,pos);
mostrarLis(listita);

cout<<"Elimina el ultimo nodo..."<<endl;


eliminaFin(listita);
mostrarLis(listita);

cout<<"Elimina el ultimo nodo..."<<endl;


eliminaFin(listita);
mostrarLis(listita);

/*cout<<"elimina toda la lista"<<endl;


eliminaAll(listita);
mostrarLis(listita);*/

cout<<"Elemento a buscar: ";


int x;
cin>>x;
busqueda(listita,x);

ordenar(listita);
mostrarLis(listita);
return 0;
}
void ordenar(pNodo lista){
pNodo sw = NULL;
while (lista != sw) {
pNodo i = lista;
pNodo j = i->sgt;
while (j != sw) {
if (i->dato > j->dato) {
int temp = i->dato;
i->dato = j->dato;
j->dato = temp;
}
i = i->sgt;
j = i->sgt;
}
sw = i;
}
}

void busqueda(pNodo lista, int x){


bool encontrado = false;
int i=1;
while (lista != NULL) {
if (lista->dato == x) {
cout<<"encontrado en "<<i<<endl;
encontrado = true;
}
i++;
lista = lista->sgt;
}
if(encontrado == false){
cout<<"NO encontrado"<<endl;
}
}

void eliminaAll(pNodo &lista){


while (lista != NULL) {
pNodo p = lista;
lista = lista->sgt;
delete(p);
}
}

void eliminaFin(pNodo &lista){


if (!estaVacia(lista)) {
if (lista->sgt == NULL) {
eliminaIni(lista);
} else {
pNodo anterior = NULL;
pNodo p = lista;
while(p->sgt != NULL){
anterior = p;
p = p ->sgt;
}
anterior->sgt = NULL;
delete(p);
}

}
}
void eliminaIni(pNodo &lista){
if (!estaVacia(lista)) {
pNodo p = lista;
lista = lista->sgt;
delete(p);
}
}

void eliminaPos(pNodo &lista, int pos){


if (pos == 1) {
eliminaIni(lista);
} else {
pNodo anterior = lista;
for(int i = 1; anterior->sgt != NULL; i++){
if(i == pos -1){
pNodo p = anterior->sgt;
anterior->sgt = p->sgt;
delete(p);
return;
}
anterior = anterior->sgt;
}
}

}
bool estaVacia(pNodo lista){
return lista == NULL;
}

void insertaFin(pNodo &lista, int v){


pNodo p = new(Nodo);
p->dato = v;
if (estaVacia(lista)) {
p->sgt = NULL;
lista = p;
} else {
pNodo anterior = lista;
while (anterior->sgt != NULL) {
anterior = anterior->sgt;
}
p->sgt = NULL;
anterior->sgt = p;
}
}
void mostrarLis(pNodo lista){
if (!estaVacia(lista)){
cout<<endl;
while(lista != NULL){
cout<<lista->dato<<"\t";
lista = lista->sgt;
}
cout<<endl;
} else {
cout<<" ***Lista vacia***"<<endl;
cout<<endl;
}

}
void insertaIni(pNodo &lista, int v){
pNodo p = new(Nodo);
p->dato = v;
p->sgt = lista;
lista = p;
}

void insertaPos(pNodo &lista,int v, int pos){


if (pos == 1) {
insertaIni(lista, v);
} else {
pNodo p=new Nodo();
p->dato=v;
pNodo anterior=lista;
for(int i=1;anterior!=NULL;i++){
if(i==pos-1){
p->sgt=anterior->sgt;
anterior->sgt=p;
return;
}
anterior=anterior->sgt;
}
}
}
8 EJEMPLO SOLUCIÓN AL EXAMEN
#include <iostream>
using namespace std;
struct Nodo{
string nombre;
int creditos;
int ciclo;
Nodo *sgt;
};
typedef Nodo* pNodo;
int menu();
void insertarIni(pNodo &lista,string nombre,int creditos,int ciclo);
void mostrarLis(pNodo lista);
int main(int argc, char *argv[]) {
pNodo lista=NULL;
int m;
do {
m=menu();
switch (m) {
case 1:
{
string nombre;
int creditos;
int ciclo;
cout << "nombre: ";
cin >> nombre;
cout << "creditos: ";
cin >> creditos;
cout << "ciclo: ";
cin >> ciclo;
insertarIni(lista,nombre,creditos,ciclo);
}
break;
case 2:

break;
case 3:
mostrarLis(lista);
break;
case 4:

break;
case 5:

break;
case 6:

break;
default:
cout << "ERROR"<<endl;
};
} while (m != 6);
return 0;
}
int menu(){
cout << "***MENU PRINCIPAL***"<<endl;
cout << "opc[01]: insertar inicio"<<endl;
cout << "opc[02]: ordenar"<<endl;
cout << "opc[03]: mostrar"<<endl;
cout << "opc[04]: eliminar inicio"<<endl;
cout << "opc[05]: contar"<<endl;
cout << "opc[06]: salir"<<endl;
cout << "elija una opcion: ";
int m;
cin >> m;
return m;
}
void insertarIni(pNodo &lista,string nombre,int creditos,int ciclo){
pNodo p=new(Nodo);
p->nombre=nombre;
p->creditos=creditos;
p->ciclo=ciclo;
p->sgt=lista;
lista=p;
}
bool Vacia( pNodo lista){
return lista ==NULL;
}
void mostrarLis(pNodo lista){

if (!Vacia(lista)) {
cout <<endl;
while (lista !=NULL){
cout<<"\t"<<lista->nombre<<"\t"<< lista-
>creditos<<"\t"<<lista->ciclo<<endl;
lista=lista->sgt;
}
cout << endl;
} else {
cout << "lista vacia"<<endl;
}
}

void ordenarLis(pNodo lista){


pNodo actual,siguiente;
string a;
int b;
int c;
actual=lista;
while(actual->sgt!=NULL){
siguiente=actual->sgt;
while(siguiente!=NULL){
if(actual->nombre>siguiente->nombre){
a=actual->nombre;
actual->nombre=siguiente->nombre;
siguiente->nombre=a;
}
if(actual->creditos>siguiente->creditos){
b=actual->nombre;
actual->nombre=siguiente->nombre;
siguiente->nombre=b;
}
if(actual->ciclo>){

}
}
}else{

}
}

9 EJEMPLO: SOLUCIÓN EXAMEN T1


int c=0;
#include <iostream>
using namespace std;
struct Nodo{
string nombre;
int creditos;
int ciclo;
Nodo *sgt;
};
typedef Nodo* pNodo;
int menu();
int contar2(pNodo lista);
void insertarIni(pNodo &lista,string nombre,int creditos,int ciclo);
void mostrarLis(pNodo lista);
void ordenar(pNodo lista);
void eliminarIni(pNodo &lista);
bool vacia( pNodo lista);
void contar(pNodo lista);
int main(int argc, char *argv[]) {
pNodo lista=NULL;
int m;
do {
m=menu();
switch (m) {
case 1:
{
string nombre;
int creditos;
int ciclo;
cout << "nombre: ";
cin >> nombre;
cout << "creditos: ";
cin >> creditos;
cout << "ciclo: ";
cin >> ciclo;
insertarIni(lista,nombre,creditos,ciclo);
}
break;
case 2:
ordenar(lista);
mostrarLis(lista);
break;
case 3:
mostrarLis(lista);
break;
case 4:
eliminarIni(lista);
mostrarLis(lista);
break;
case 5:
contar(lista);
cout<<"Numero de elementos :"<<contar2(lista)<<endl;
break;
case 6:

break;
default:
cout << "ERROR"<<endl;
};
} while (m != 6);
return 0;
}
int menu(){
cout << "***MENU PRINCIPAL***"<<endl;
cout << "opc[01]: insertar inicio"<<endl;
cout << "opc[02]: ordenar"<<endl;
cout << "opc[03]: mostrar"<<endl;
cout << "opc[04]: eliminar inicio"<<endl;
cout << "opc[05]: contar"<<endl;
cout << "opc[06]: salir"<<endl;
cout << "elija una opcion: ";
int m;
cin >> m;
return m;
}
void insertarIni(pNodo &lista,string nombre,int creditos,int ciclo){
pNodo p=new(Nodo);
p->nombre=nombre;
p->creditos=creditos;
p->ciclo=ciclo;
p->sgt=lista;
lista=p;
c++;
}
bool vacia( pNodo lista){
return lista ==NULL;
}
void mostrarLis(pNodo lista){

if (!vacia(lista)) {
cout <<endl;
while (lista !=NULL){
cout<<"\t"<<lista->nombre<<"\t"<< lista-
>creditos<<"\t"<<lista->ciclo<<endl;
lista=lista->sgt;
}
cout << endl;
} else {
cout << "lista vacia"<<endl;
}
}

void ordenar(pNodo lista){


if(lista==NULL){
cout<<"La lista no tiene elementos ";
}else{
pNodo sw = NULL;
while(lista != sw){
pNodo i = lista;
pNodo j = i->sgt;
while(j!=sw){
if(i->nombre > j->nombre){
string temp=i->nombre;
i->nombre=j->nombre;
j->nombre=temp;

int temp2=i->creditos;
i->creditos=j->creditos;
j->creditos=temp2;

int temp3=i->ciclo;
i->ciclo=j->ciclo;
j->ciclo=temp3;
}
i=i->sgt;
j=i->sgt;

}
sw=i;
}
}
}

void eliminarIni(pNodo &lista){


if(!vacia(lista)){
pNodo p=lista;
lista=lista->sgt;
delete(p);
c--;
}

void contar(pNodo lista){


cout<<"Numero de Registros"<<c;
cout<<endl;
}

int contar2(pNodo lista){


int c=0;
while(lista){
c++;
lista=lista->sgt;
}
return c;
}

10 EJEMPLO
#include <iostream>
using namespace std;

struct Nodo{
int dato;
Nodo *sgt;
};

typedef Nodo* pNodo;


typedef Nodo* tPila;
void push(tPila &pila, int v);
int pop(tPila &pila);
void mostrarPila(tPila pila);
bool estaVacia(tPila pila);

int main(int argc, char *argv[]) {


cout<<"numero de elementos a insertar a la pila: ";
int n;
cin>>n;
tPila pilita = NULL;
for (int i=0;i<n;i++) {
cout<<"dato "<<(i+1)<<": ";
int v;
cin>>v;
push(pilita, v);
}
mostrarPila(pilita);
cout<<"Eliminando..."<<pop(pilita)<<endl;
cout<<"Eliminando..."<<pop(pilita)<<endl;

return 0;
}

void push(tPila &pila, int v){


tPila p = new Nodo();
p->dato = v;
p->sgt = pila;
pila = p;
}
int pop(tPila &pila){
if (!estaVacia(pila)) {
tPila p = pila;
int v = p->dato;
pila = pila->sgt;
delete(p);
return v;
}
return 0;
}
bool estaVacia(tPila pila){
return pila == NULL;
}
void mostrarPila(tPila pila){
cout<<endl;
while (pila != NULL) {
cout<<pila->dato<<"\t";
pila = pila->sgt;
}
cout<<endl;
}

11 EJEMPLO
#include <iostream>
using namespace std;

struct Nodo{
int dato;
Nodo *sgt;
};

typedef Nodo* tPila;

void push(tPila &pila, int v);


int pop(tPila &pila);
void mostrarPila(tPila pila);
bool estaVacia(tPila pila);
void capicua(int n);

int main(int argc, char *argv[]) {


cout<<"Numero a evaluar: ";
int n;
cin>>n;
capicua(n);
return 0;
}
void capicua(int n){
int temp = n;
tPila pilita = NULL;
while (temp > 0) {
push(pilita,temp%10);
temp /= 10;
}

temp = n;
while (temp > 0) {
if (temp%10 != pop(pilita)) {
cout<<"El numero no es capicua"<<endl;
return;
} else {
temp /= 10;
}
}
cout<<"El numero ES capicua"<<endl;
}
void push(tPila &pila, int v){
tPila p = new Nodo();
p->dato = v;
p->sgt = pila;
pila = p;
}
int pop(tPila &pila){
if (!estaVacia(pila)) {
tPila p = pila;
int v = p->dato;
pila = pila->sgt;
delete(p);
return v;
}
return 0;
}
bool estaVacia(tPila pila){
return pila == NULL;
}
void mostrarPila(tPila pila){
cout<<endl;
while (pila != NULL) {
cout<<pila->dato<<"\t";
pila = pila->sgt;
}
cout<<endl;
}

12 EJEMPLO
#include <iostream>
#include <cstring>
using namespace std;

struct Nodo{
char dato;
Nodo *sgt;
};

typedef Nodo* tPila;

void push(tPila &pila, char v);


char pop(tPila &pila);
void mostrarPila(tPila pila);
bool estaVacia(tPila pila);
bool expresionBalanceada(char expresion[]);

int main(int argc, char *argv[]) {


cout<<"expresion a evaluar: ";
char expresion[100];
cin>>expresion;
cout<<"expresion balanceada:
"<<expresionBalanceada(expresion)<<endl;
return 0;
}

bool expresionBalanceada(char expresion[]){


int n = strlen(expresion);
tPila pila = NULL;
for (int i=0;i<n;i++) {
if (expresion[i] == '(') {
push(pila, expresion[i]);
}
if (expresion[i] == ')') {
if(!estaVacia(pila)){
pop(pila);
}else{
return false;
}
}
}
return estaVacia(pila);
}
void push(tPila &pila, char v){
tPila p = new Nodo();
p->dato = v;
p->sgt = pila;
pila = p;
}
char pop(tPila &pila){
if (!estaVacia(pila)) {
tPila p = pila;
char v = p->dato;
pila = pila->sgt;
delete(p);
return v;
}
return 0;
}
bool estaVacia(tPila pila){
return pila == NULL;
}
void mostrarPila(tPila pila){
cout<<endl;
while (pila != NULL) {
cout<<pila->dato<<"\t";
pila = pila->sgt;
}
cout<<endl;
}

13 EJEMPLO
14 EJEMPLO

15 EJEMPLO

16 EJEMPLO

17 EJEMPLO

18 EJEMPLO

19 EJEMPLO

20 EJEMPLO

21 EJEMPLO
22 EJEMPLO

23 EJEMPLO

24 EJEMPLO

25 EJEMPLO

26 EJEMPLO

27 EJEMPLO

28 EJEMPLO

29 EJEMPLO
30 EJEMPLO

31 EJEMPLO

32 EJEMPLO

33 EJEMPLO

34 EJEMPLO

35 EJEMPLO

36 EJEMPLO

37 EJEMPLO
38 EJEMPLO

39 EJEMPLO

40 EJEMPLO

41 EJEMPLO

42 EJEMPLO

43 EJEMPLO

44 EJEMPLO

45 EJEMPLO
46 EJEMPLO

47 EJEMPLO

48 EJEMPLO

49 EJEMPLO

50 EJEMPLO

Vous aimerez peut-être aussi