live long and prosper
此文章仅作参考,内容为学习笔记
##链栈
相对复杂的数据结构可以使用链表的方式实现,采用链式存储结构的栈称为链栈
链栈的优点是不会出现栈满溢出的情况。
1.声明结点类型
typedef struct linknode
{
int data;
linknode *next;
}LinkStnode;
2.初始化链栈
创建一个空链栈是,即创建一个头结点,将其next域设为空。
void InitStack(LinkStnode*&s)
{
s=(LinkStnode*)malloc(sizeof(LinkStnode));
s->next=NULL;
}
3.销毁链栈,释放链栈占用的全部结点空间
void DestroyStack(LinkStnode*&s)
{
LinkStnode *pre=s,*p=s->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
4.判断栈是否为空
bool Stackempty(LinkStnode*&s)
{
return (s->next==NULL);
}
5.进栈
进栈操作与链表运算有些相似之处
void Push(LinkStnode*&s,int e)
{
LinkStnode *p=(LinkStnode*)malloc(sizeof(LinkStnode));
p->data=e;
p->next=s->next;
s->next=p;
}
6.出栈
在栈不为空的情况下,将首结点数值赋给参数额e,然后将其删除。
bool Pop(LinkStnode*&s,int e)
{
LinkStnode *p;
if(s->next==NULL)
return false;
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return true;
}
7.取栈顶元素
在栈不为空的情况下,取出栈顶元素。
bool Gettop(LinkStnode*&s,int e)
{
if(s->next->data==NULL)
return false;
e=s->next->data;
return true;
}
a==NULL)
return false;
e=s->next->data;
return true;
}
如有错误,欢迎斧正