顺序栈、链栈、顺序队列、链队列区别
来源:互联网 发布:如何购买网络域名 编辑:程序博客网 时间:2024/06/11 14:43
1.顺序栈
顺序栈的主要特征是用一个数组实现栈的存储,top指针确定栈顶元素位置
定义形式如下:
#define Max 100template <class T>class SeqStack{public: SeqStack():top(-1){} void Push(T x); T getTop(); T Pop(); bool IsEmpty(); bool IsFull(); int getSize();private: T A[Max]; int top;}
2.链栈
链栈的特点是在主体链栈类外定义一个结构体,来实现结点的存储,在类中定义top指针,指向Node头结点。
定义形式如下:
template <class T>struct Node{ T data; Node<T> *next;};template <class T>class LinkedStack{public: LinkedStack(); void Push(const T&x); T Pop(); T getTop(); bool IsEmpty()const{return (top->next==NULL)?true:false;} int getSize()const; void makeEmpty(); private: Node<T> *top; //栈顶指针};
3.顺序队列
队列基于数组的存储表示称为顺序队列,front指向队首,队首删除元素,rear队尾,队尾添加元素。
但是单纯的数组表示,可能会造成浪费空间。
为了充分利用存储空间,将数组的前端front和后端rear连接起来,形成一个环形的表,称为循环队列。
循环队列定义特征是:
(1)利用数组实现存储。
(2)有两个整数值作为指针功能,front指向队首元素,rear指向队尾元素的下一位,注意不是队尾元素。
实际上front、rear即为数组第一个元素和最后一个元素下一位的下标。
(3)由于是循环队列,每次删除,或者添加元素,或者判断队列是否满的时候,注意判别式的写法
①删除元素:front=(front+1)%Max;
②添加元素:rear=x;rear=(rear+1)%Max;
③判断队列是否满:if((rear+1)%Max==front) 栈满
④判断队列是否为空:if(rear==front) 栈空
⑤得到队列长度:length=(rear-front+Max)%Max
⑥得到队尾元素:注意不是data[rear] 而是data[rear-1]
循环队列的定义形式如下:
template <class T>class SeqQueue{public: SeqQueue(){MakeEmpty();} void MakeEmpty(); bool EnQueue(T x); bool DeQueue(T &x); T getFront(); bool IsEmpty(); bool IsFull(); int getSize(); T getRear();private: T data[Max]; int front_; int rear;};
4.链队列
链队列不是用数组实现存储功能,而是定义一个结构体来表示结点,故不存在浪费空间,也不用考虑循环的问题
template <class T>struct Node{ T data; Node *next;};template <class T>class LinkedQueue{public: LinkedQueue(); ~LinkedQueue(){front_=rear=0;} T getFront(); T getRear(); void EnQueue(T x); void DeQueue(); bool IsEmpty(); int getSize(); private: Node<T> *front_,*rear;};下几篇将给出具体的创建顺序栈、链栈、顺序队列(循环队列)、链队列的代码
0 0
- 顺序栈、链栈、顺序队列、链队列区别
- 顺序栈和顺序队列
- 顺序队列和链队列
- 顺序队列 - 循环队列 - 链队列
- 顺序栈和队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- 顺序队列
- show tables有表select提示表不存在
- powerdesgion连接线修改为折线
- Conversion to Dalvik format failed with error 1
- Android 毛玻璃(高斯模糊) 开源控件。简单、快速、高效。(基于fastblur)
- 10020---
- 顺序栈、链栈、顺序队列、链队列区别
- 查询病案首页最后保存时间
- kalman算法原理
- GCD详解
- 浅谈KVC和KVO
- ${}没有数据
- constraintWithItem:函数
- NYOJ_116_士兵杀敌(二)插点问线
- 针对中科院java接口的使用方法和问题