循环顺序队列的基本操作
来源:互联网 发布:linux环境apache ab 编辑:程序博客网 时间:2024/06/05 19:48
唉,技术不到位,今下午花了近两小时才搞定,队列的入队,出队,输出队列中的所有元素以及判断是否满实现全。
希望对大家有点帮助。希望各位大牛不吝指教。
#include<iostream>
using namespace std;
class SqQueue
{
public:
SqQueue(int size=10){
base=new int[size];
front=rear=0;
queueSize=size;
}
~SqQueue(){
delete[] base;
}
int deQueue(int &e){
if(isEmpty()){
cout<<"已空";
return 1;
}
e=base[front];
front=(front+1)%queueSize;
return 0;
}
int enQueue(int e){
if(isFull()) {
cout<<"入队有误,当前已满,不能再入队"<<endl;
return 1; }
base[rear]=e;
rear=(rear+1)%queueSize;
return 0;
}
bool isEmpty(){
return front==rear? true:false;
}
bool isFull(){
return(rear+1)%queueSize==front? true:false;
}
int Empty(){
if(isEmpty())
cout<<"为空"<<endl;
return 0;
}
int print(){ //这是最让我ballache的一个函数,
int e;
if(isEmpty())
return 1;
cout<<"此时队列为"<<endl;
if (front<rear){
int n=front;
for( n;n<rear;n++){
e=base[n];
cout<<e<<endl;
}
}
else if (front>rear){
int b=front;
for(b;(b%queueSize)!=rear; ){ //技术不够扎,想了好一会儿,囧,这里我用相当于用头指针
e=base[b]; //去遍历的,当front+1=rear时表中元素全部输出,所以限
using namespace std;
class SqQueue
{
public:
SqQueue(int size=10){
base=new int[size];
front=rear=0;
queueSize=size;
}
~SqQueue(){
delete[] base;
}
int deQueue(int &e){
if(isEmpty()){
cout<<"已空";
return 1;
}
e=base[front];
front=(front+1)%queueSize;
return 0;
}
int enQueue(int e){
if(isFull()) {
cout<<"入队有误,当前已满,不能再入队"<<endl;
return 1; }
base[rear]=e;
rear=(rear+1)%queueSize;
return 0;
}
bool isEmpty(){
return front==rear? true:false;
}
bool isFull(){
return(rear+1)%queueSize==front? true:false;
}
int Empty(){
if(isEmpty())
cout<<"为空"<<endl;
return 0;
}
int print(){ //这是最让我ballache的一个函数,
int e;
if(isEmpty())
return 1;
cout<<"此时队列为"<<endl;
if (front<rear){
int n=front;
for( n;n<rear;n++){
e=base[n];
cout<<e<<endl;
}
}
else if (front>rear){
int b=front;
for(b;(b%queueSize)!=rear; ){ //技术不够扎,想了好一会儿,囧,这里我用相当于用头指针
e=base[b]; //去遍历的,当front+1=rear时表中元素全部输出,所以限
//条件是b%queueSize!=rear。
cout<<e<<endl;
b=(++b%queueSize); //当遍历到末尾时,b跳到头部开始遍历
}
cout<<e<<endl;
b=(++b%queueSize); //当遍历到末尾时,b跳到头部开始遍历
}
}
return 0;
}
protected:
int front;
int rear;
int queueSize;
int *base;
};
int main(){
SqQueue d;
cout<<"入队前"<<endl;
d.Empty();
cout<<"1进队"<<endl;
d.enQueue(1);
cout<<"2进队"<<endl;
d.enQueue(2);
cout<<"3进队"<<endl;
d.enQueue(3);
cout<<"4进队"<<endl;
d.enQueue(4);
cout<<"5进队"<<endl;
d.enQueue(5);
cout<<"6进队"<<endl;
d.enQueue(6);
cout<<"7进队"<<endl;
d.enQueue(7);
cout<<"8进队"<<endl;
d.enQueue(8);
cout<<"9进队"<<endl;
d.enQueue(9);
cout<<"当前队列为";
d.print();
cout<<"10进队"<<endl;
d.enQueue(10);
cout<<"11进队"<<endl;
d.enQueue(11);
d.print();
int e;
d.deQueue(e);
cout<<"队中第一个元素"<<e<<"出队"<<endl;
d.deQueue(e);
cout<<"队中第二个元素"<<e<<"出队"<<endl;
d.print();
cout<<"12入队";
d.enQueue(12);
d.print();
cout<<"13入队";
d.enQueue(13);
d.print();
cout<<"14入队"<<endl;
d.enQueue(14);
return 0;
}
//循环顺序队列中最重要的是头尾指针的移动还有最重要的那几个判断条件。
1.当rear>front时,用rear-front算队列长度(代码中没有写,自己可以试试)
当rear<front时,(rear-front+MAX_SIZE)%MAX_SIZE算循环队列长度
2.当rear=front时,队列为空
当(rear+1)%MAX_SIZE=front时,队列为满
- 循环顺序队列的基本操作
- 顺序队列(非循环)的基本操作
- 顺序循环队列的基本操作
- 顺序循环队列的基本操作
- 顺序循环队列的基本操作
- 线性表----循环队列(顺序表示)的基本操作
- 顺序循环队列的基本操作(2017.7.26)
- 数据结构--循环队列的顺序存储基本操作
- 顺序队列的基本操作
- 顺序队列的基本操作
- 顺序队列的基本操作;
- 顺序队列的基本操作
- 顺序队列的基本操作
- 顺序队列的基本操作
- 顺序队列的基本操作
- 顺序队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- STL容器的适用情况
- 程序员究竟该如何提高效率
- 网络socket编程指南
- ptype
- 二进制数的几种表示方法
- 循环顺序队列的基本操作
- 建立Linux开发环境
- matplotlib显示中文问题
- 用汇编的眼光看C++(之类继承)
- 最短路径分析算法in OpenGraphRouter初探
- (转/学习)C++ 方式的内存分配与释放 new 和 delete
- 我谈完美主义性格的人!
- ncurses库
- IIS配置MVC网站