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;
}
#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");
}