目录
1.链栈有四个要素:两个特殊状态和两个操作
两个状态
(1)栈空状态
head->next == NULL
(2)栈满状态
链栈不存在栈满状态
两个操作
(1)元素(p所指元素)进栈操作
p->next = head->next;
head->next = p; //头插法建立链表的插入操作
(2)出栈操作
p = head->next;
x = p->data;
head->next = p->next;
free(p); //单链表的删除操作
2.链栈的初始化代码
void initStack (LNode*&head) //lst改变用引用型
{
head = (LMode*)malloc(sizeof(LNode) ); //制造一个头结点
head->next = NULL;
}
3.判断栈空代码
栈空返回1,否则返回0
int isEmpty(LNode *lst)
{
if(lst->next == NULL)
return 1;
else
return 0;
}
4.进栈代码
void push (LNode *head, int x)
{
LNode *p;
p = (LNode*)malloc(sizeof(LNode)); //为进栈元素申请结点空间
p->next = NULL;
//以下是链表头插法
p->data = x; //为新结点的数据域赋值
p->next = head->next; //将头指针所指向的下一个结点的地址,赋给新创建结点的next指针域
head->next = p; //将新创建的结点的地址赋给头指针的下一个结点
}
5.出栈代码
在栈不空的情况下执行,返回 1;否则返回 0
int pop (LNode *head, int &x)
{
LNode *p;
if(head->next == NULL)
return 0;
//以下是单链表的删除
p = head->next; //p指向head->next 也就是指向自己,防止后继结点都被删除
x = p->data; //x把数据存储起来了
head->next = p->next;
free(p);
return 1;
}