栈的定义及概念:
栈是限定在表的同一端进行插入或删除操作的线性表。
栈顶:进行插入或删除操作的一端
栈底:与栈顶的另一端
空栈:没有数据元素的栈
入栈:插入数据元素
出栈:删除数据元素
栈具有后进先出、先进后出的特点。
栈只能在栈顶进行操作
栈的基本操作:
栈的顺序存储类型定义:
typedef struct stack{
int top;//就是线性表存储结构的length
StackEntry *elem;//动态分配空间大小为stack_size
int stack_size;
}Stack,*Stackptr;
约定top用于存放栈顶元素的位置,top=-1表示空栈,top=stack_size表示栈满。
溢出:
1、顺序栈的数据元素空间大小是预先分配。
2、当空间全部占满后再入栈产生的溢出为上溢。
3、当栈为空再出栈产生的溢出为下溢。
顺序栈入栈操作:
其中,StackEntry为数据元素类型(int,float,char等等)
Status push(Stackptr s;StackEntry item){
Status a=success;
if(Stack_Full(s)){
a=overflow;//
}
else{
s->top++;
s->entry[s->top]=item;
}
return a;
}
顺序栈出栈操作:
其中,StackEntry为数据元素类型(int,float,char等等)
Status pop(Stackptr s,StackEntry *item)
{
Status a=success;
if(s->top==-1){
a=underflow;//栈空则下溢
}
else{
*item=s->entry[s->top--];//将top所指元素放入item,top再减一
}
return a;
}
取栈顶元素操作:
其中,StackEntry为数据元素类型(int,float,char等等)
Status top(Stackptr s,StackEntry *item)
{
Status a=success;
if(s->top==-1){
a=underflow;//栈空则下溢
}
else{
*item=s->entry[s->top];//取出top所指数据,top不变
}
return a;
}