链栈结点定义
这里用带头结点的单链表作为存储体。
typedef struct LNode{
int data; //数据域
struct LNode *next; //指针域
}LNode; //链栈结点定义
链栈的初始化
//链栈的初始化
void InitStack(LNode *&1st){ //1st要改变,用引用型
1st=(LNode *)malloc(sizeof(LNode)); //制造一个头结点
1st->next=NULL;
}
判断栈空
int isEmpty(LNode *1st){
if(1st->next==NULL) //链栈为空
return 1;
else //链栈不为空
return 0;
}
进栈
void Push(LNode *1st, int x){
LNode *p;
p=(LNode *)malloc(sizeof(LNode)); //为进栈元素申请结点空间
p->next=NULL; //可以不写,但是每当申请新结点时,将其指针域设置为NULL,可以避免一些错误
//以下3句是链表的头插法
p->data=x;
p->next=1st->next;
1st->next=p;
}
出栈
int Pop(LNode *1st, int &x){ //x要改变,要用引用型
LNode *p;
if(1st->next==NULL) //栈空则不能出栈,返回0
return 0;
//以下是单链表的删除操作
p=1st->next;
x=p->data;
1st->next=p->next;
free(p);
return 1;
}