手动封装一个循环顺序队列类(Stack)
私有成员属性:存放队列的数组、两个变量分别记录队头和队尾下标公有成员函数:
入队(push( type value ))
出队(pop())
展示(show)
求队列长度(size())︰要求时间复杂度在常量级别判满( bool full())
判空(bool empty())
#include <iostream>
using namespace std;
#define MAXSIZE 8
typedef int datatype;
class Stack
{
private:
datatype data[MAXSIZE];
int front=0;
int rear=0;
public:
int queue_in(int s);
int queue_out();
int show();
int queue_lenth();
};
int Stack::queue_in(int s)//入队
{
if(front == (rear+1)%MAXSIZE)//判满
{
return 0;
}
data[rear] = s;
rear = (rear+1)%MAXSIZE;
return s;
}
int Stack::queue_out()//出队
{
if(front == rear)//判空
{
cout<<"出队失败"<<endl;
return 0;
}
cout<<"出队的元素为"<<data[front]<<endl;
front=(front+1)%MAXSIZE;
return 0;
}
int Stack::show()
{
if(front == rear)//判空
{
cout<<"遍历失败"<<endl;
return -1;
}
for(int i=front;i!=rear;i=(i+1)%MAXSIZE)
{
cout<<data[i]<<endl;
}
return 0;
}
int Stack::queue_lenth()
{
return (MAXSIZE-front+rear)%MAXSIZE;
}
int main()
{
Stack s1;int s;int num,len;
cout<<"请输入要输入的元素个数"<<endl;
cin >> num;
if(num >= MAXSIZE)
{
cout<<"请输入合法的元素个数"<<endl;
return 0;
}
for(int i=0;i<num;i++)
{
cout<<"请输入入队元素"<<endl;
cin>>s;
s1.queue_in(s);
}
s1.show();
s1.queue_out();
s1.queue_out();
s1.queue_out();
s1.show();
len = s1.queue_lenth();
cout<<"请输入要输入的元素个数"<<endl;
cin >> num;
if(num >= MAXSIZE-s1.queue_lenth())
{
cout<<"请输入合法的元素个数"<<endl;
return 0;
}
for(int i=0;i<num;i++)
{
cout<<"请输入入队元素"<<endl;
cin>>s;
s1.queue_in(s);
}
s1.show();
len = s1.queue_lenth();
cout<<"队列的长度为"<<len<<endl;
return 0;
}