如题,代码奉上,请各位帮忙看一下错在哪了
#include <stdio.h>
#include <stdlib.h>
struct _ListStack
{
struct NodeInt *first;
struct NodeInt *last;
int n;
int top;
};
struct NodeInt
{
int value;
struct NodeInt *next;
};
void InitStack(_ListStack *s);
int Push(_ListStack *s, int v);
int Pop(_ListStack *s, int *v);
int Empty(_ListStack *s);
int GetTop(_ListStack *s, int *v);
int main(void)
{
_ListStack sl1;
int r;
int ch;
int v;
InitStack(&sl1);
/*Push(&sl1, 10);
Push(&sl1, 20);
Push(&sl1, 30);
Push(&sl1, 40);*/
ch=-1;
while(ch)
{
printf("------------------\n");
printf("1 - Push\n");
printf("2 - Pop\n");
printf("3 - GetTop\n");
printf("4 - Empty\n");
printf("0 - Exit\n");
printf("------------------\n");
printf("Select:");
scanf("%d", &ch);
ch=1;
switch(ch)
{
case 1:
printf("输入值:");
scanf("%d", &v);
r = Push(&sl1, v);
printf("OK, n = %d\n", sl1.n);
break;
case 2:
r = Pop(&sl1, &v);
switch(r)
{
case 0:
printf("OK, n = %d,出栈的是%d\n", sl1.n, v);
break;
case -1:
printf("Error: 栈为空\n");
break;
}
break;
case 3:
r = GetTop(&sl1, &v);
switch(r)
{
case 0:
printf("OK, 栈顶内容是%d\n", v);
break;
case -1:
printf("Error: 栈是空的\n");
break;
}
break;
}
}
return 0;
}
void InitStack(_ListStack *s)
{
s->n = 0;
s->top=0;
s->first->next=NULL;
s->last=s->first;
}
int Push(_ListStack *s, int v)
{
if(s->n==0)
{
s->last->value=v;
s->top++;
s->n++;
}else
{
struct NodeInt *p;
p=s->last->next;
p->value=v;
s->n++;
s->top++;
}
return 0;
}
int Pop(_ListStack *s, int *v)
{
if(s->n==0)
{
return -1;
}
*v = s->last->value;
s->top--;
s->n--;
return 0;
}
int GetTop(_ListStack *s, int *v)
{
if(s->top == 0)
{
return -1;
}
*v = s->last->value;
return 0;
}
int Empty(_ListStack *s)
{
return s->n == 0;
}