Programacion de Pilas en C

Iniciado por Alex0101, 14 Febrero 2016, 01:28 AM

0 Miembros y 1 Visitante están viendo este tema.

Alex0101

Tengo este codigo es para manejar pilas en c pero no me quiere correr no le encuentro error espero que me puedan ayudar!!

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>


typedef struct stackNode STACKNODE;

typedef STACKNODE * STACKNODEP;

void push(STACKNODEP*, int);

int pop(STACKNODEP*);

int isVacia(STACKNODEP);

void imprimePila(STACKNODEP);

void menu(void);

void menu(void) {
printf("Opciones:\n");
printf("1. Insertar un nodo a la pila\n");
printf("2. Eliminar un nodo de la pila\n");
printf("3. Finalizar\n");
}

void imprimepila(STACKNODEP actualP) {
if (actualP == NULL) {
printf("La pila esta vacía");
}
else {
printf("La pila es:\n");
while (actualP != NULL) {
printf("%d->", actualP->data);
actualP = actualP->nextP;
}
printf("NULL\n\n");
}
}

int pop(STACKNODEP *topP) {
STACKNODEP tempP;
int sacarvalor;
tempP = *topP;
sacarvalor = (*topP)->data;
*topP = (*topP)->nextP;
free(tempP);
return sacarvalor;
}

void push(STACKNODEP *topP, int info) {
STACKNODEP nuevoP;
nuevoP = (STACKNODEP) malloc(sizeof(STACKNODE));         /*Correcion*/
if (nuevoP != NULL) {
nuevoP->data = info;
nuevoP->nextP = *topP;
*topP = nuevoP;
}
else {
printf("\n No se inserto el elemento %d en la pila", info);
}
}

struct stackNode {
int data;
struct stackNode * nextP;
};

int isVacia(STACKNODEP topP) {
return (topP == NULL);
}


int main()
{
STACKNODEP stackP = NULL;
int op, valor;

menu();
printf("\n Elige una opcion:");
scanf("%d", &op);

while (op != 3) {
switch (op) {
case 1:
printf("\n Teclea un entero");
scanf("%d", &valor);
push(&stackP, valor);
imprimePila(stackP);
break;
case 2:
if (!isVacia(stackP)) {
printf("\n El valor sacado es: %d", pop(&stackP));
}
imprimePila(stackP);
break;
default:
printf("\n Opcion no valida");
break;
}

printf("\n Elige una op");
scanf("%d", &op);
}

printf("\Fin de programa");
   return 0;
}

abaadoon

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


void insertarnodoinicio();
void insertarnodoalfinal();
void insertarentrenodos();
void eliminarnodoinicio();
void eliminarnodofinal();
void eliminarentredosnodos();
void buscarnumero();
void mostrarnodo();


typedef struct datos{
 struct datos *psig;
 int numero;
}dato;

     dato *cab=NULL;
     dato *n=NULL;
     dato *aux=NULL;
     dato *p=NULL;
     dato *q;
     int x,pos,numerodenodos=0,opc;
     
     int main()
     {
           do{
                 printf("\n************************* ELIGE UNA OPCION **********************************\n\n");
                 printf("                   1.-Insertar Un Nodo al Inicio\n");
                 printf("                   2.-Insertar Un Nodo al Final\n");
                 printf("                   3.-Insertar entre dos Nodos\n");
                 printf("                   4.-Mostrar Lista\n");
                 printf("                   5.-Buscar Nodo\n");
                 printf("                   6.-Eliminar Nodo al Inicio\n");
                 printf("                   7.-Eliminar Nodo Final\n");
                 printf("                   8.-Eliminar Entre dos nodos\n");
                 printf("                   9.-Salir\n");      
                 printf("\n\nTeclee su opcion: ");
                 scanf("%d",&opc);
                                   
                 switch(opc){
                             case 1:
                             insertarnodoinicio();
                             break;
                                                   
                             case 2:
                             insertarnodoalfinal();
                             break;
                                               
                             case 3:
                             insertarentrenodos();
                             break;
                                                   
                             case 4:    
                             mostrarnodo();
                             break;
                             
                             case 5:
                             buscarnumero();
                             break;
                             
                             case 6:
                             eliminarnodoinicio();
                             break;
                             
                             case 7:
                             eliminarnodofinal();
                             break;
                             
                             case 8:
                             eliminarentredosnodos();
                             break;
                             
                             case 9:
                             exit(0);break;              
                             
                             default:
                             printf("Opcion no valida");break;    
                          }
                             
                                   }while(opc!=9);
                                   getch();
                                   
                                     
                                   }
                           
                           
                           
void eliminarentredosnodos()
{
    q=cab;
    int h=1;
    if (cab=NULL)
   
                 printf("La lista esta vacia");
                 
                 
             else
                 {
            printf("Ingrese Nodo a eliminar: ");
            scanf("%d",&x);
            while (q->numero!=x && h==1)
            {
            if (q->psig!=NULL)
            {
                              p=q;
                              q=q->psig;
                              }                                              
            else
                 
            h=0;
            }
                 if (p->psig==NULL)
                 printf("Elemento no Encontardo");
                 else
                 {
                     if (cab=q)
                     cab=q->psig;
                     else
                     p->psig=q->psig;
                 }
                 
                 delete(q);
      }
                                   
    getch();
    system("CLS");
}
                           
                           
       
                           
void eliminarnodofinal()
{
    p=cab;
    if (cab==NULL)
    printf("No hay Numeros en la lista");
   if (cab->psig==NULL)
   {
       delete (cab);
       cab=NULL;
       }
   
    else
    {
       
   while(p->psig!=NULL)
   {
   aux=p;
   p=p->psig;
}
   aux->psig=NULL;
   delete p;
   numerodenodos--;
}
getch();
system("cls");    
}






void eliminarnodoinicio()
{
   
    if (cab==NULL)
    printf("No hay numeros que eliminar");
    else
    {
     
        aux=cab;
        cab=cab->psig;
        delete (aux);
        aux=NULL;
        numerodenodos--;
}    
getch();
system("cls");    
}


           
void buscarnumero()
{
    int eli;
     if (cab==NULL)
     {
    printf("No hay numeros en la lista");
    }
    else
    {
    q=cab;
    printf("Que Numero desea buscar: ");
    scanf("%d",&x);
    pos=1;
    while(q!=NULL && q->numero!=x)
    {
    q=q->psig;
    pos++;
    }
   
    if (q!=NULL)
    printf("%d Esta en la lista y en la posicion %d\n",x,pos);
   
   
    else
    {
         printf("%d No esta en la lista\n",x);
         
         }    
}    

getch();
system("cls");    
   
}
                 
void insertarnodoinicio(){
n=(dato*)malloc(sizeof (struct dato));
printf("\nElementos a insertar: ");
scanf("%d",&x);
n->numero=x;
n->psig=NULL;
if(cab==NULL)
cab=n;
                                                     
else{
n->psig=cab;
cab=n;
}
numerodenodos++;
                                                     
system("CLS");
                                                     
}
           
void mostrarnodo()
{
if(cab==NULL)
printf("Lista vacia.........\n");
                                       
else{
p=cab;
printf("\nLista de numeros...\n");
while(p!=NULL){
printf("\n%d\n",p->numero);
p=p->psig;
}
printf("\nEl numero de nodos es: %d ",numerodenodos);
                                                   
                                                     
}
getch();
system("CLS");
}
                                       
void insertarnodoalfinal()
{
n= (dato*)malloc(sizeof(dato));
printf("Ingresa dato:  ");
scanf("%d",&x);
n->numero=x;
n->psig=NULL;
if(cab==NULL){
cab=n;
numerodenodos++;
}
else{
p=cab;
while(p->psig!=NULL)
{
p=p->psig;
}
p->psig=n;
numerodenodos++;
}
getch();
system("CLS");
                                           
}
                                 
  void insertarentrenodos()
{
     if(cab==NULL)
     printf("No hay  elementos");
     else
     {
         
         
            printf("Ingrese la posicion en que desees insertar: ");
            scanf("%d",&pos);
           
            if(pos> numerodenodos || pos==1)
            printf("Solamente es valido entre 2 nodos");
            else
            {
                n=(dato*)malloc(sizeof(dato));
                printf("Ingresa dato: ");
                scanf("%d",&x);
                n->numero=x;
                n->psig=NULL;
                             aux=cab;
                for(int i=1; i<pos-1; i++)
               
            {
                aux=aux->psig;
                }
                n->psig=aux->psig;
                aux->psig=n;
                 numerodenodos++;
                }
                }
                getch();
                system("cls");
}