完整代码如下
#include <stdio.h>
#include <stdlib.h>
typedef struct stack //链栈结构体定义
{
int data;
struct stack *next;
}stack,*List_stack ;
List_stack Init() //链栈初始化
{
List_stack top=(List_stack *)malloc(sizeof(List_stack));
if(top!=NULL)//申请空间成功
top->next=NULL;//设置栈顶指针为空
return top;
}
int Push(List_stack top,int x) //入栈操作
{
int ret;
stack *node;
node = (stack *)malloc(sizeof(stack));
if (node==NULL) {
ret=-1;
}
else {
node->data=x;
node->next=top->next;
top->next=node;
}
return ret;
}
int Pop(List_stack top) //出栈
{
int ret;
stack *node;
node = (stack *)malloc(sizeof(stack));
if (top->next==NULL||node==NULL) {
ret=-1;
}
else {
node=top->next;//新建结点指向栈顶结点
ret=node->data;//取出栈值
top->next=node->next;//等于top->next=top->next->next;
}
return ret;
}
int Get_Top(List_stack top) //取栈顶元素
{
int ret;
if (top->next) {
ret=top->next->data;
return ret;
}
else {
return -1;
}
}
int main() {
int m,n;
List_stack top= Init();
char srt[100];
int ret;
scanf("%d", &m);
while ( m--) {
scanf("%s ",&srt);
if (!strcmp(srt,"push")) {
scanf("%d", &n);
ret=Push(top,n);
}
if (!strcmp(srt,"pop")) {
ret=Pop(top);
if (ret==-1)
{
printf("error\n");
continue;
}
printf("%d\n",ret);
}
if (!strcmp(srt,"top")) {
ret = Get_Top(top);
if (ret==-1)
{
printf("error\n");
continue;
}
printf("%d\n",ret);
}
}
return 0;
}
个人理解