Вы находитесь на странице: 1из 8

Programa en C++

Filas
#include <stdio.h>
#include <stdlib.h>

struct digito{
int n;
digito *next;
};

//Prototipos de funciones

int menu( );/*Int en lugar de char por que sobre pasa el 9


y ya son decimales*/

digito *insertar(digito *last);


digito *eliminar(digito *last);
digito *borrarFila(digito *last);
int contarElementos(digito *last);
int filaVacia (digito *first);
void recorrerFila(digito *first,digito *last);
void primerElemento (digito *first);
void ultimoElemento (digito *last);
digito *insertaFinalFila(digito *last);
digito *insertaInicioFila (digito *first);
void insertaEnMedio(digito *first, digito *last);
void mostrarElementos (digito *last);
digito *sacarPrimeroFila (digito *last, digito *first);
digito *vaciarFilaInversa(digito *last);
digito *vaciarFilaDirecta(digito *last,digito *first);

int main(){//Igual int por char

digito *first=NULL;
digito *last=NULL;
int opcion;

do{

opcion=menu();

switch(opcion){

case 1://Se le quitaron las '' por que es un numero entero

if(!filaVacia(first))
printf("La Fila NO esta vacia\n\n");

else
printf("La Fila ESTA vacia\n\n");
break;

case 2:

if(filaVacia(first))
printf("Laf fila esta vacia... \n\n");

else
printf("El primer elemento de la Fila es: %d \n\n",first->n);
break;

case 3:
if(filaVacia(first))
printf("La fila esta vacia... \n\n");

else
printf("El ultimo elemento de la Fila es: %d \n\n",last->n);
break;

case 4:
last=insertaFinalFila(last);
if (filaVacia(first)) first=last;
break;

case 5: // Insetar un elemnto al inicio de la fila


if (filaVacia(first)) {
first=insertaInicioFila(first);
last=first;
}
else first=insertaInicioFila(first);
break;

case 6: //Insertar un elemento en medio de la fila ordenadamente.

printf("Insertar un elemento en medio de la Fila ordenadamente\n\n");


insertaEnMedio(first,last);

break;

case 7: // Mostrar los elementos de la Fila

if(filaVacia(first)) printf("La fila esta vacia... \n\n");


else if (first==last) {
printf("La fila solo tiene un elemento: %d\n",last->n);
}
else recorrerFila(first,last);
printf("\n\n");
break;

case 8: // Sacar un elemento al inicio de la fila.


if(filaVacia(first)) printf("La fila esta vacia...\n");
else if (first==last) { // si la fila solo tiene un elemento
printf("Salio el elemento %d de la fila...\n\n",first->n);
delete(first);
first=NULL;
last=NULL;
} else first=sacarPrimeroFila (last,first);
break;

case 9: // Sacar cualquier elemento de la fila, conociendo su número. FALTA


printf("Sacar cualquier elemento de la Fila conociendo su numero \n");
last=insertar(last);
break;

case 10: //10.-Contar cuantos elementos hay en la fila.

if(filaVacia(first)) printf("La fila esta vacia...\n\n");


else contarElementos(first);
printf ("Hay %d elementos en la fila\n\n", contarElementos(last));
break;

case 11: // 11.-Sacar todos los elementos de la fila, desde el primero


printf("Vaciar la Fila en orden como fueron llegando...\n\n");
if (filaVacia(first)) printf("Ls fila esta vacia...\n");
else if (first==last) { // si la fila solo tiene un elemento
printf("El elemento %d salio de la fila..\n\n",first->n);
delete(first);
first=NULL;
last=NULL;
}
else {
first=vaciarFilaDirecta(last,first);
last=NULL;
}
break;

case 12: // 12.-Vaciar la fila en orden inverso. FALTA

printf("Vaciar la Fila en orden inverso\n\n");


if (filaVacia(first)) printf("Ls fila esta vacia...\n");
else if (first==last) { // si la fila solo tiene un elemento
printf("El elemento %d salio de la fila..\n\n",first->n);
delete(first);
first=NULL;
last=NULL;
}
else {
first=vaciarFilaInversa(last);
last=NULL;
}
break;

case 13:

printf("Salir\n");
break;
}//Cierra el switch

}while(opcion!=13);
return(0);
}//Cierra el main

digito *insertar(digito *tope){


digito *temp=new digito;
temp->next=tope;
tope=temp;
return(tope);
}

digito *eliminar(digito *tope){

digito*temp=NULL;

if(filaVacia(tope))return(NULL);

else{

temp=tope;
tope=tope->next;
printf("Se va a eliminar %d\n", temp->n);
delete(temp);
return(tope);
}
}

digito *borrarFila(digito *tope){

digito*temp=tope;

if(filaVacia(tope))
printf("La pila ESTA vacia\n");
else
while(tope!=NULL){

printf("El elemento %d salio de la pila\n", tope->n);


temp=tope;
tope=tope->next;
delete(temp);
}
return(tope);
}

void recorrerFila(digito *first,digito *last){


digito *temp,*temp2=first;
do {
temp=last;
while (temp->next!=temp2) temp=temp->next;
printf("%d ",temp2->n);
temp2=temp;
} while (temp2!=last);
printf("%d\n\n",temp2->n);
}

int contarElementos(digito *last){

int conta=0;
digito *temp= last;
while (temp!=NULL){

conta++;
temp=temp->next;
}

return(conta);
}

int filaVacia (digito *first){

if (first==NULL) return (1); //la fila si esta vacia


else return (0); //la fila esta vacia
}

void primerElemento (digito *first){

if (filaVacia(first))
printf ("La fila esta vacia... \n");
else
printf ("El primer elemento es %d \n", first->n);
}

void ultimoElemento (digito *last){

if (filaVacia(last))
printf("La fila esta vacia... \n");
else
printf("El elemento al final de la fila es %d \n", last->n);
}

digito *insertaFinalFila(digito *last){


digito *temp=new digito;//crea un nuevo nodo
printf("Dame el valor del nodo: ");
scanf ("%d", &temp->n);
temp->next=last;
return (temp);
} //cierra la funcion

digito *insertaInicioFila (digito *first){

digito *temp=new digito;


temp->next=NULL;
printf("Dame el valor del nodo: ");
scanf ("%d",&temp->n);
if (first!=NULL) first->next=temp;
return (temp);
} //cierra la funcion

void insertaEnMedio(digito *first, digito *last){

digito *temp=new digito;


digito *aux=last;
printf("Dame el valor del nodo: ");
scanf("%d", &temp->n);
if (temp->n<=last->n){//inserta al final de la fila
temp->next=last;
last=temp;
}
else {
while ((aux->next!=NULL) && (aux->next->n<temp->n)) aux=aux->next;
temp->next=aux->next;
aux->next=temp;
}
}

digito *insertaEnMedio2(digito *first, digito *last){

digito *temp=new digito;


digito *aux=NULL;
if (filaVacia(first)){
first=temp;
last=temp;
temp->next=NULL;
printf("Dame el valor del nodo: ");
scanf("%d", &temp->n);
}
else{

printf("Dame el valor del nodo: ");


scanf("%d", &temp->n);
if (temp->n<=last->n){//inserta al final de la fila

temp->next=last;
last=temp;
}
else if (temp->n>=first->n){//inserta el inicio

temp->next=NULL;
first->next=temp;
first=temp;
}//cierra else if
else{//inicia else

aux=last;
while ((aux!=NULL)&&(aux->n<temp->n)&&(aux->next!=NULL)&&(aux->next->n<temp->n))
aux=aux->next;//avanza todo lo que puede
temp->next=aux->next;//inserta el elemento
aux->next=temp;//donde debe de estar
}
return (last);
}//cierra insertaEnMedio
}

void mostrarElementos (digito *last){

digito *temp=last;
if (filaVacia(temp))
printf ("La lista esta vacia... \n");

else{

while (temp!=NULL){

printf ("El elmento %d esta en la fila \n", temp->n);


temp=temp->next;
}//cierra else
}//cierra mostrarElementos
}

digito *sacarPrimeroFila (digito *last, digito *first) {


digito *temp=last;
while (temp->next!=first) temp=temp->next;
printf ("El elemento %d salio de la fila \n...", first->n);
delete(first);
first=temp;
first->next=NULL;
return (first);
}//fin sacarPrimeroFila

digito *vaciarFila(digito *last, digito *first){

digito *temp=last;
while (temp!=NULL){

temp=sacarPrimeroFila(last, first);
}
return(temp);
}

int menu() {
int opcion;
printf("\n\nSelecciona una opcion:\n");
printf ("1.-Detectar si la fila esta vacia.\n");
printf ("2.-Mostrar el primer elemento de la fila. \n");
printf ("3.-Mostrar el último elemento de la fila. \n");
printf ("4.-Insertar elemento al final de la fila. \n");
printf ("5.-Insertar un elemento al inicio de la fila. \n");
printf ("6.-Insertar un elemento en medio de la fila, ordenadamente. \n");
printf ("7.-Mostrar los elementos de la fila. \n");
printf ("8.-Sacar un elemento al inicio de la fila. \n");
printf ("9.-Sacar cualquier elemento de la fila, conociendo su número. \n");
printf ("10.-Contar cuantos elementos hay en la fila. \n");
printf ("11.-Sacar todos los elementos de la fila, desde el primero. \n");
printf ("12.-Vaciar la fila en orden inverso. \n");
printf ("13.- Salir \n\n");
scanf ("%d", &opcion);
return (opcion);
}

digito *vaciarFilaInversa(digito *last) {


digito *temp=NULL;
while (last!=NULL) {
temp=last;
printf("Salio el elemento %d\n",last->n);
last=last->next;
delete(temp);
}
return(NULL);
}

digito *vaciarFilaDirecta(digito *last,digito *first){


digito *temp=last;
while (first!=last){ /// cuando la fila tiene dos o mas elementos
temp=last;
while (temp->next!=first) temp=temp->next;
printf("El elemento %d salio de la fila...\n",first->n);
delete(first);
first=temp;
first->next=NULL;
}
// se supione que ya solo queda un elemento en la fila...
printf("El elemento %d salio de la fila...\n",first->n);
delete(first);
first=NULL;
last=NULL;
return(NULL);
}

Вам также может понравиться