栈与队列
线性表插入和删除操作不受限制 在任意位置进行
栈和队列是两种特殊的线性表。他们的数据元素之间具有顺序的逻辑关系,都采用顺序结构和链式结构存储
栈的插入和删除操作只允许在线性表的尾端(栈顶Top)进行
队列插入操作限定在线性表的尾部而其它操作限定在表的头部进行
栈的特点为后进先出,队列先进先出
栈
表尾称为栈顶(Top),另一端称为栈底(Bottom),当栈中没有数据元素时叫空栈(Empty Stack)
方法:
Push()入栈 //添加数据
Pop()出栈 //删除数据,返回被删除的数据
Peek()//取得栈顶的元素,不删除
ToArray() //方法创建数组并将堆栈元素复制到其中
Contains() //方法判断一个元素是否在栈中
Clear()//清空所有数据
Count //取得栈中元素的个数
接口定义:
1 | public interface IStack{ |
栈的本质是一个线性表,线性表有两种存储形式,那么栈也有分为栈的顺序存储结构和栈的链式存储结构
用连续的存储空间来存储栈中的数据元素(使用数组),这样的栈称为顺序栈(Sequence Stack)
类似于顺序表,用一维数组来存放顺序栈中的数据元素
栈顶指示器 top 设在数组下标为 0 的端,top随着插入和删除而变化,当栈为空时,top=-1
栈的另外一种存储方式是链式存储,这样的栈称为链栈(Linked Stack)
由于链栈的操作只是在一端进行,为了操作方便,把栈顶设在链表的头部,并且不需要头结点
示例
1 | // Stack<T> staA = new Stack<T>(); |
队列
插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队头(Front)。当队列中没有数据元素时称为空队列(EmptyQueue)
方法:
Enqueue() 入队(放在队尾)
Dequeue() 出队(移除队首元素,并返回被移除的元素)
Peek() 取得队首的元素,不移除
Clear() 清空元素
接口定义:
1 | public interface IQueue<T>{ |
用连续的存储空间来存储队列中的数据元素,这样的队列称为顺序队列(SequenceQueue)
类似于顺序栈,用一维数组来存放顺序队列中的数据元素。队头位置设在数组下标为 0 的端,用 front 表示;队尾位置设在数组的另一端,用rear 表示
front 和 rear 随着插入和删除而变化。当队列为空时, front=rear=-1
队列的另外一种存储方式是链式存储,这样的队列称为链队列(LinkedQueue)
由于链队列的操作只是在一端进行,为了操作方便,把队头设在链表的头部,并且不需要头结点