知识大全 栈和队列 - 栈 - 链栈
Posted 结点
篇首语:赋料扬雄敌,诗看子建亲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 栈和队列 - 栈 - 链栈相关的知识,希望对你有一定的参考价值。
链栈
栈的链式存储结构称为链栈
链栈的类型定义
链栈是没有附加头结点的运算受限的单链表 栈顶指针就是链表的头指针
>
链栈的类型说明如下
typedef struct stacknode
DataType data
struct stacknode *next
StackNode;
typedef struct
StackNode *top; //栈顶指针
LinkStack;
注意
①LinkStack结构类型的定义是为了方便在函数体中修改top指针本身
②若要记录栈中元素个数 可将元素个数属性放在LinkStack类型中定义
链栈的基本运算
( ) 置栈空
Void InitStack(LinkStack *S)
S >top=NULL;
( ) 判栈空
int StackEmpty(LinkStack *S)
return S >top==NULL;
( ) 进栈
void Push(LinkStack *S DataType x)
//将元素x插入链栈头部
StackNode *p=(StackNode *)malloc(sizeof(StackNode));
p >data=x;
p >next=S >top;//将新结点*p插入链栈头部
S >top=p;
( ) 退栈
DataType Pop(LinkStack *S)
DataType x;
StackNode *p=S >top;//保存栈顶指针
if(StackEmpty(S))
Error( Stack underflow ); //下溢
x=p >data; //保存栈顶结点数据
S >top=p >next; //将栈顶结点从链上摘下
free(p);
return x;
( ) 取栈顶元素
DataType StackTop(LinkStack *S)
if(StackEmpty(S))
Error( Stack is empty )
return S >top >data;
注意
链栈中的结点是动态分配的 所以可以不考虑上溢 无须定义StackFull运算
cha138/Article/program/sjjg/201311/23927相关参考