顺序队的基本操作(C++完整代码)
来源:互联网 发布:知乎如何添加图片 编辑:程序博客网 时间:2024/06/02 01:29
这里是用C++编写的队的基本操作,包括入队、不带参出队、带参出队和vector顺序容器的基本操作。
可与c语言的代码对照看,便于理解。
(C语言的代码在这里:
http://blog.csdn.net/fengyanglian/article/details/50010601)
以下是C++的完整源代码:
//c语言中,我们是建立结构体,其中包含front,back,data[MAXSIZE]含有MAXSIZE个元素的数组//这里的c++,我们用类成员标识这几个变量,这里的类中,我们包含有私有成员front,back,size,Array含size个元素的容器#include<iostream>#include<vector>using namespace std;template <typename Object> class Queue //类模板{ public: Queue(int capacity = 5) : front(0), back(-1), size(0), Array(capacity) { } bool isEmpty() //判断是否为空 { return size == 0; } bool isFull() //判断队是否已满 { return size == Array.size(); } void EnQueue(Object x) //插入元素到队中 { if(isFull()) //若队已满,将其扩大一倍,并复制愿数据到新容器中, //是复制到后半部分,并设置front,back { Array.resize(Array.size() * 2); //假如有5个位置(队已满,只有两种情况): //(A)当队列为1(首) 2 3 4 5(尾),扩容后应为1 2 3 4 5 1(首) 2 3 4 5(尾),首尾均移动,下次入队从开始处,首尾间为有效位置 //(B)当队列为1 2(尾) 3(首) 4 5,扩容后应为1 2(尾) 3 4 5 1 2 3(首) 4 5,队首移动队尾不动,首尾间为无效位置 for(int i = front; i < Array.size() / 2; i++) Array[i + Array.size() / 2] = Array[i]; front += Array.size() / 2; if(back == Array.size()/2 - 1) back += Array.size() / 2; } //若队未满,正常操作,size加,back移到下一个位置,入队 size++; back = succ(back); Array[back] =x; } //不带返回值的出队 void DeQueue() { if(isEmpty()) { cout << "Empty!" << endl; return; } else { size--; front = succ(front); } } //带返回值的出队 Object DeQueueObject() { if(isEmpty()) { cout << "Empty!" << endl; return NULL; } else { size--; Object obj = Array[front]; front = succ(front); return obj; } } //清空(队还存在,只是将其中元素清零) void makeEmpty() { front = 0; back = -1; size = 0; for(int i = 0; i < Array.size(); i++) Array[i] = Object(); //将所有元素设为其类型的初始值 } void Printf() //用于显示队中元素 { cout << "The queue is: "; for(int i = front; i != succ(back); i = succ(i)) //从front开始,到back结束 //(back时也要输出),所以到succ(back) { cout << Array[i] << " "; } cout << endl; } private: int front; //与c中结构体里的变量一致 int back; int size; vector<Object> Array; //用顺序容器vector存储队中元素 int succ(int index) //取当前位置的下一个位置(front下一个位置:出桟后位置。back下一个位置:入栈位置) //正常情况下,直接取后一个。若当前位置在队末端,则折回去,取第一个位置。 { if(++index == Array.size()) index=0; return index; }};int main(){ Queue<int> q; q.EnQueue(1); q.EnQueue(2); q.EnQueue(3); q.EnQueue(4); q.EnQueue(5); q.EnQueue(6); q.EnQueue(7); q.EnQueue(8); //将8个数据入队 q.Printf(); //输出队中元素 cout << "The element is been deleted." << endl; //不带参的删除,并输出队 q.DeQueue(); q.Printf(); cout << "The delete element is: " //带参的删除,输出删除元素,并输出当前队 << q.DeQueueObject() << endl; q.Printf(); return 0;}
0 0
- 顺序队的基本操作(C++完整代码)
- 顺序队的基本操作(C 完整源代码)
- 二叉排序树的基本操作(完整代码)
- 顺序表的基本操作(C++)
- SqListFunc顺序链表的12个基本操作的C语言代码(数据结构)
- 二叉平衡树的基本操作(完整代码)
- 快速排序基本操作的优化(完整代码)
- 动态链表的增删改查,打印销毁等基本操作及代码模块化(完整C语言代码!)
- 自己写的顺序表的基本操作,插入、删除、修改,给出完整代码,其中运用到goto语句
- 顺序表的基本操作实现代码
- 顺序表的基本操作(C语言)
- 数据结构 (C语言)顺序表的基本操作
- 队列的基本操作(顺序结构)C/C++
- C语言实现----顺序表的基本操作(1)
- 顺序线性表的基本操作(C语言实现)
- 【C++/数据结构】顺序表的基本操作
- C语言顺序表的基本操作
- C语言顺序栈的基本操作
- MySql使用CURRENT_TIMESTAMP
- 怎么计算UDP的广播地址
- Filter应用之解决全站字符乱码问题
- c# 循环控件 把控件的名称和值 写入xml中
- linux 算术指令和文件指令的判断
- 顺序队的基本操作(C++完整代码)
- MATLAB中squeeze函数的作用
- 对Java中的 int AND Integer的理解
- Android seekbar样式介绍
- mac NDK 环境搭建
- Mac上svn连不上的原因
- 【Android】SDK和API Level版本的对应关系
- Spring定时器
- spring工具类AntPathMatcher