C++ 实现简单队列
来源:互联网 发布:linux的echo命令 编辑:程序博客网 时间:2024/05/22 10:44
闲来无事,晚上有偷了个闲实现了队列。
头文件:
#pragma once#define MAX 20class QueueRecord{public:QueueRecord();~QueueRecord(void);int IsEmpty();int IsFull();void MakeEmpty();void Enqueue(int x);int FrontOnly();void Dequeue();int FrontAndDequeue();private:int Capacity;int Front;int Rear;int Size;int Array[MAX];};
.cpp:
#include "StdAfx.h"#include "QueueRecord.h"#include <stdexcept>using std::runtime_error;QueueRecord::QueueRecord():Size(0),Front(1),Rear(0),Capacity(MAX){}QueueRecord::~QueueRecord(void){//delete [] Array;}int QueueRecord::IsEmpty(){return Size == 0;}int QueueRecord::IsFull(){return Size == Capacity;}void QueueRecord::MakeEmpty(){Size = 0;Front = 1;Rear = 0;}void QueueRecord::Enqueue(int x){if (IsFull()){runtime_error("Full Queue");}else{if (++Rear==Capacity){Rear = 0;}Size++;Array[Rear] = x;}}void QueueRecord::Dequeue(){if (IsEmpty()){runtime_error("Empty Queue");}else{if (++Front==Capacity){Front = 0;}Size--;}}int QueueRecord::FrontOnly(){if (IsEmpty()){return 0;}return Array[Front];}int QueueRecord::FrontAndDequeue(){if (IsEmpty()){runtime_error("Empty Queue");return 0;}else{int x = Array[Front];if (++Front==Capacity){Front = 0;}Size--;return x;}}
已经亲测,可以用。
几点说明:
1.为了省事,没有用动态数组。因为在前文中已经提到,指针实现的动态数组不能用下标进行赋值(我也不知道原因,但是在我的VS2010上就是不行),所以就固定了大小,有利有弊,目测弊要大于利啊……
2..cpp中有一行“//delete [ ] Array; ”,被我注释了,这里说个说明,也是无意中发现的。本来是觉得开了一个数组,用完之后释放内存的(估计我当时梦游以为我用的是动态数组呢),然后调试的时候,显示“其原因可能是堆被损坏,这说明 中或它所加载的任何 DLL 中有 Bug”,我不知道是怎么回事,就google了一下,找到了答案。原来局部变量开辟的是栈,而用new开辟的是堆空间,所以用delete释放内存的时候就会报DLL的错误。详情请戳这里:点击打开链接 这里有详细的讨论。
也算是无意中发现的一个秘密吧,也许以后在用DLL开辟空间给应用程序的时候犯这样的错误呢,是吧!
好吧,就到这里结束吧~~
- C实现简单循环队列
- c循环队列简单实现
- c语言简单实现队列
- C语言-循环队列的简单实现
- C语言队列QUEUE简单实现
- C语言指针实现简单队列
- 队列的简单实现--C语言
- [数据结构]队列的C语言简单实现
- 用C语言实现简单链式队列结构
- 用C语言实现简单循环队列结构
- c语言用简单数组实现循环队列
- 循环队列简单实现
- 队列及简单实现
- 队列的简单实现
- 队列的简单实现
- C++ 实现简单队列
- 链式队列简单实现
- 简单队列实现
- 什么是DAO
- MFC 博客链接
- 工控机(组态型)、嵌入式工业电脑、上位机组态软件
- 【mysql】hql查询日期用法
- oralce汉字转拼音
- C++ 实现简单队列
- 举例说明Android中Button中的OnClickListener更简便的用法
- 【排序算法】交换排序(C++实现)
- 教你透彻了解红黑树
- Windows Serever 2008无法安装.NET Framework 3.5的解决办法
- 盖茨和他的微软- 前传
- 创建子进程成功却未执行到main
- NDK快速创建大文件
- Problem E - Camel trading