手动封装一个循环顺序队列类(Stack)
私有成员属性:存放队列的数组、两个变量分别记录队头和队尾下标
公有成员函数: 入队(push( type value ))
出队(pop())
展示(show)
求队列长度(size()):要求时间复杂度在常量级别
判满( bool full())
判空(bool empty())
head.h
#ifndef HEAD_H
#define HEAD_H
#include <iostream>
#define MAXSIZE 20
using namespace std;
class Q
{
private:
int data[MAXSIZE];
int front=0;
int rear=0;
public:
int loop_isfull();
int loop_isempty();
int loop_enqueue(int e);
int loop_dequeue();
void loop_show();
int loop_count();
};
#endif // 07_H
head.cpp
#include <head.h>
int Q::loop_isfull()
{
if(front==(rear+1)%MAXSIZE)
{
cout<<"队列已满"<<endl;
return -1;
}
return 0;
}
int Q::loop_isempty()
{
if(front==rear)
{
cout<<"队列为空"<<endl;
return -1;
}
return 0;
}
int Q::loop_enqueue(int e)
{
if(loop_isfull())
return -1;
data[rear]=e;
rear=(rear+1)%MAXSIZE;
return 0;
}
int Q::loop_dequeue()
{
if(loop_isempty())
return -1;
cout<<"出队的元素是:"<<data[front]<<endl;
front=(front+1)%MAXSIZE;
return 0;
}
void Q::loop_show()
{
loop_isempty();
for(int i=front;i!=rear;i=(i+1)%MAXSIZE)
{
cout<<data[i]<<endl;
}
}
int Q::loop_count()
{
return (MAXSIZE-front+rear)%MAXSIZE;
}
main.cpp
#include <head.h>
int main()
{
Q q;
while(1)
{
int i,e;
cout<<"请输入操作:"<<endl;
cout<<"------操作1:入队--------"<<endl;
cout<<"------操作2:出队--------"<<endl;
cout<<"------操作3:展示--------"<<endl;
cout<<"------操作4:求队列长度---"<<endl;
cin>>i;
switch (i)
{
case 1:
cout<<"输入入队元素:"<<endl;
cin>>e;
q.loop_enqueue(e);
break;
case 2:
q.loop_dequeue();
break;
case 3:
q.loop_show();
break;
case 4:
cout<<q.loop_count()<<endl;
break;
default:
cout<<"请重新输入:"<<endl;
break;
}
}
return 0;
}