当前位置:   article > 正文

数据结构(四)——栈_栈上溢和下溢的区别

栈上溢和下溢的区别

栈,即stack,同样是线性表。只是它在设计时,运算规则做了限制。是限定性的线性表结构。

栈,只能在固定的一端插入和取出(取出,也就意味着删除了)。通常,能插入删除的那一端,叫做栈顶,top;不能插入删除的,称为栈底,bottom。插入栈,称为入栈。删除,称为出栈/退栈。当栈中没有元素时,称为空栈。
学习过单片机的应该对栈有了解,毕竟是有一个实实在在的物理容器的概念。出入栈的原则,是先进后出,last in first out(LIFO),因此,栈又被称为,后进先出表。

栈,同样分为顺序栈和链式栈。
如果是顺序栈的话,可能在运算时出现“溢出”。溢出分两种,上溢和下溢。若系统分配的作为栈的储存区满了,还有元素进栈,则是上溢。如果栈里已经没有元素了,还要执行出栈,则是下溢。上溢是一种错误现象,需要分配更大的空间,下溢则常用于作为控制转移的条件或者程序结束的标志。

但是,之前学单片机的经验告诉我,栈是因为在在这么一个特殊的物理结构下呈现的逻辑结构。但不管有没有这样一个物理上的空间结构,编程语言通过算法自己模拟实现了这样的逻辑结构。

一般使用栈,也都是用它的链式结构。所以,程序也只是链式的栈的程序。
首先,是定义一个栈的结构体:

typedef struct node{
	elementype data;
	struct node *next;
}node,* linkstack; 

值得说明的是,在这里设置的栈,是只能在表头插入和删除的单链表。在这种逻辑下,头节点本质上,并不是栈的top。第二个结点,才是栈的top。因为链表的头结点,是链表的寻址由来,是不能被插入和移动的嘛,所以就不能作为真正意义上的top。

各类函数:

elementype popStack(linkstack  lstack);
void pushStack(linkstack  lstack,elementype DatatoTop);
elementype readTop(linkstack  lstack);
void deleteStack(linkstack  lstack);
void printDataStack(linkstack  lstack);

出栈:

elementype popStack(linkstack  lstack)
{
	node * 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/316155
推荐阅读
相关标签
  

闽ICP备14008679号