堆栈的定义
简称为栈,是限定只能在表的一端进行插入和删除操作的线性表。在表中,允许插入和删除的一端称作“栈顶”另一端称为“栈底”。通常将元素插入栈顶的操作称为“入栈”(或压栈),称删除栈顶元素的操作称作为“出栈”。堆栈好比,往一个箱子里装书,先放进来的书被后进的书压在下面,反而后面的书在使用中最先被拿走。如下图所示
栈的基本运算如下
(1) StackInit() 初始化堆栈。
(2) StackEmpty(s) 判定栈s是否为空。
(3) StackLeng(s) 求栈堆s的长度。
(4) GetTops(s) 获取栈顶元素的值。
(5) Pop(s) 出栈(删除栈顶元素)。
栈的存储结构分为:顺序栈,链栈。我们判断栈满还是栈空的条件是?栈满:top = Msxsize-1 栈空:top – 1 。top为指针,指向某一个元素的下方。当栈中没有元素的时候,指针位于栈底下,如进行入栈的操作,我们先对其进行判断,这个栈是不是满了的,打印“堆栈已满”。否则进行,top指针上移加1,填入元素。下图为入栈的展示
队列的定义
简称队,是限定只能在一端作插入运算,在另一端作删除运算的线性表,在表中,允许插入的一端称为“队尾”,允许删除的一端称为“队首”,通常将元素插入队尾的操作称为入队列,称删除队首的元素称为出队列。队列的就像我们去排队办理业务一样,自觉排队,来得快的先排前面先办理业务,先到先得。后面来得只能按规矩的排在队伍后面。
如果要判定,队列是否为空或队列是不是满了呢,一般来说,队列从零开始,零就代表有数了,故此:队空 front=reat-1 ,front为前指针,rear为后指针,前指针等于后指针等与负一,不为零代表的队列为空。相对的,队满rear==Maxsize-1,rear指针不变,最大值减一代表队列为满。但还存在另一种情况,那就是“溢出”,当rear=Maxsize-1时,再加入新元素,那就会产生“溢出”,它不是指真正的“溢出”,在数组的前端可能有空位置。如何解决假溢出呢?循环队列,将数组的前端跟后端连接起来,形成一个环形的表,从逻辑上看成一个环,成为循环队列,出限队列为空的几种情况:
初始化时:front=rear=0
循环队列为空时:front==rear。前后指针重合
顺环队列为满时:front==(rear+1)%Maxsize。前指针 后指针加一除以最最大值。
队列的存储结构有两种:分为顺序队列,链式队列。如下图示
总结:数组中的堆栈与队列都是线性表,堆栈也是一种特殊的线性表,因为其满足元素与元素之间的逻辑关系一一对应。堆栈不同于队列的规矩,其特点是:先进后出,后进先出。而不像队列的,先进先出,后进后出。在我们看来是不讲理的。其存储结构分为:顺序结构与链表结构。顺序结构:前后有序,紧密相连。链表结构:不是连续的空间由数据域以及指针域组成。