数据结构-队列:循环队列与链队列的C++模板类实现
来源:互联网 发布:澳门网络博客游戏 编辑:程序博客网 时间:2024/04/30 02:28
C++模板类实现循环队列和链队列
实现的功能:
1.入列,2.出列,3.显示对头,4.判空,5.判满,6.清空队列,7.求队列长度。
循环队列的模板类实现代码:
//循环队列******************************************************************************#include <iostream>using namespace std;#define QUEUE_SIZE 100template <class DataType>class CirQueue{public:CirQueue(){ queue_front = QUEUE_SIZE - 1; queue_rear = QUEUE_SIZE - 1; queue_size = 0; }~CirQueue(){}void EnQueue(DataType index);void DeQueue();DataType GetQueue();bool Empty(){ if (queue_front == queue_rear) return true; else return false; }bool Full(){ if ((queue_rear + 1) % QUEUE_SIZE == queue_front) return true; else return false; }void clearQueue(){ while (queue_front != queue_rear) { data[queue_rear] = 0; queue_rear--; queue_size = 0; } }int queue_size;private:DataType data[QUEUE_SIZE];int queue_front, queue_rear;};template <class DataType>void CirQueue<DataType>::EnQueue(DataType queue_index)//从对尾入队{if (Full() == true) { std::cout << "队列已满,无法入列" << std::endl; }else{queue_rear = (queue_rear + 1) % QUEUE_SIZE; //循环入队data[queue_rear] = queue_index;queue_size++;}}template <class DataType>void CirQueue<DataType>::DeQueue() //对头元素出队{if (Empty() == true) std::cout << "队列已空,无法出列" << std::endl;else{queue_front = (queue_front + 1) % QUEUE_SIZE; //循环出队std::cout << "已出列:" << data[queue_front] << std::endl;queue_size--;}}template <class DataType>DataType CirQueue<DataType>::GetQueue(){if (Empty() == true){std::cout << "队列已空,队列中无数据" << std::endl;return -1;}else{int queue_temp = (queue_front + 1) % QUEUE_SIZE;std::cout << "队列头:" << data[queue_temp] << std::endl;return data[queue_temp];}}//主函数int main(){CirQueue<int>queue;int select = 10;int Item = 0;while (select){std::cout << std::endl;cout << "*****************************" << endl;cout << "[1]入列 [2]出列 *" << endl;cout << "[3]获取对头元素 [4]清空队列*" << endl;cout << "[5]队列长度 *" << endl;cout << "*****************************" << endl;cout << "请选择:>";cin >> select;switch (select){case 1:cout << "请输入要入列的值:>";cin >> Item; getchar();queue.EnQueue(Item);cout << Item << " 已入列" << endl;break;case 2:queue.DeQueue();break;case 3:queue.GetQueue();break;case 4:queue.clearQueue();cout << "队列已清空" << endl;break;case 5:std::cout << "队列长度:" << queue.queue_size << std::endl;break;default:break;}}return 0;}
链队列的模板类实现代码:
//链队列******************************************************************************#include <iostream>using namespace std;#define QUEUE_SIZE 100template <class DataType>class LinkQueueNode{public:DataType data;LinkQueueNode<DataType>* next;};template <class DataType>class LinkQueue{public:LinkQueue();~LinkQueue(){}void EnQueue(DataType queue_index);void DeQueue();DataType GetQueue();bool Empty(){ if (queue_front == queue_rear) return true;else return false; }void clearQueue();int queue_size;private:LinkQueueNode<DataType> *queue_front, *queue_rear;DataType queue_first;};template <class DataType>LinkQueue<DataType>::LinkQueue(){LinkQueueNode<DataType> *queue_node = (LinkQueueNode<DataType> *)malloc(sizeof(LinkQueueNode<DataType>));queue_node->next = NULL;queue_front = queue_rear = queue_node;queue_size = 0;}template <class DataType>void LinkQueue<DataType>::EnQueue(DataType queue_index)//从对尾入队{LinkQueueNode<DataType> *addNode = (LinkQueueNode<DataType> *)malloc(sizeof(LinkQueueNode<DataType>));addNode->data = queue_index;addNode->next = NULL;queue_rear->next = addNode;queue_rear = addNode;queue_size++;}template <class DataType>void LinkQueue<DataType>::DeQueue() //对头元素出队{if ( Empty() ) std::cout << "队列已空,无法出列" << std::endl;else{DataType queue_x;LinkQueueNode<DataType> *queue_p;queue_p = queue_front->next;queue_x = queue_p->data;queue_front->next = queue_p->next;if (queue_p->next == NULL)queue_rear = queue_front;delete queue_p;queue_size--;std::cout << "已出列:" << queue_x << std::endl;}}template <class DataType>DataType LinkQueue<DataType>::GetQueue(){if (Empty()){std::cout << "队列已空,队列中无数据" << std::endl;return -1;}else{std::cout << "对头:" << queue_front->next->data << std::endl;return queue_front->next->data;}}template <class DataType>void LinkQueue<DataType>::clearQueue(){while (queue_front != queue_rear) {DataType queue_x;LinkQueueNode<DataType> *queue_p;queue_p = queue_front->next;queue_x = queue_p->data;queue_front->next = queue_p->next;if (queue_p->next == NULL)queue_rear = queue_front;delete queue_p;}queue_size = 0;}//主函数int main(){LinkQueue<int>queue;int select = 10;int Item = 0;while (select){ std::cout << std::endl;cout << "*****************************" << endl;cout << "[1]入列 [2]出列 *" << endl;cout << "[3]获取对头元素 [4]清空队列*" << endl;cout << "[5]队列长度 *" << endl;cout << "*****************************" << endl;cout << "请选择:>";cin >> select;switch (select){case 1:cout << "请输入要入列的值:>";cin >> Item; getchar();queue.EnQueue(Item);cout << Item << " 已入列" << endl;break;case 2:queue.DeQueue();break;case 3:queue.GetQueue();break;case 4:queue.clearQueue();cout << "队列已清空" << endl;break;case 5:cout << "队列长度:" << queue.queue_size << endl;break;default:break;}}return 0;}
0 0
- 数据结构-队列:循环队列与链队列的C++模板类实现
- 数据结构的C实现_循环队列
- 数据结构循环队列的实现c程序
- 数据结构的C实现_循环队列
- 【数据结构】循环队列的实现(c++)
- 栈与队列-顺序队列与链队列类模板的实现(数据结构基础 第3周)
- 数据结构 - - 链队列与循环队列
- [数据结构]队列之顺序队列的类模板实现
- [数据结构]队列之链式队列的类模板实现
- 循环队列与链式队列的实现
- 数据结构--队列实现(顺序队列和链队列)与C++模板
- 数据结构(C实现)------- 顺序队列(非循环队列)
- c 实现的 循环队列
- 【数据结构】队列-循环队列
- 【数据结构-队列】循环队列
- 数据结构(队列):循环队列
- 数据结构(C语言)实现循环队列
- 数据结构C语言实现之循环队列
- 【设计模式】状态模式
- 【HTML】网页错误码详细报错
- 2017武汉大学校赛网络预选赛g题
- cogs 14. [网络流24题] 搭配飞行员
- 组合模式
- 数据结构-队列:循环队列与链队列的C++模板类实现
- java工程师成神之路
- 我讨厌志向远大的人
- HDU5534 Partial Tree 【DP】
- 如何设置网页地址栏前面的标志favicon图标?
- innodb中幻读与mvcc和间隙锁分析
- 1.getting started Stanford CoreNLP
- 赶去公司(某客某易模拟题)
- MyBatis