栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表(简称LIFO:Lastin,Firstout.结构)。
用链表实现栈,仅仅限定在头指针和尾指针,可以将头指针作为栈低,尾指针作为栈顶,所以对栈的操作也就限定在尾指针。
这里可以给栈定义一系列基本操作:
SqStack*InitStack()//初始栈voidPop(SqStack*s,Elemtypedata)//入栈ElemtypePush(SqStack*s)//出栈voidDestory(SqStack*s)//销毁栈
以下述类型说明作为顺序栈的定义:
这里可以给栈定义一系列基本操作:
typedefintElemtype;typedefstructLNode{ structLNode*next; Elemtypedata;}LNode;typedefstructSqStack{ LNode*head; intlen;}SqStack;
这里我们为栈定义了一个结构体,存储了栈顶的指针,我们存储了栈的长度,栈顶的指针我们使用链表来实现,这样我们出栈或者入栈只要要对栈顶指针操作就可以。
接下来我们看对栈的初始化操作
SqStack*InitStack(){ SqStack*s=(SqStack*)calloc(1,sizeof(SqStack)); assert(s); returns;}
那么,我们销毁一个栈时,我们不仅要判断栈是否为空,不为空时要把链表都清空,
接下来我们看对栈的初销毁操作
voidDestory(SqStack*s){ assert(s); if(s-len!=0) { LNode*node=s-head; while(1) { if(node==NULL) { break; } else{ LNode*d=node; node=d-next; free(d); } } } free(s); }