手动封装一个循环顺序队列类(Stack)
私有成员属性:存放队列的数组、两个变量分别记录队头和队尾下标
公有成员函数: 入队(push( type value ))
出队(pop())
展示(show)
求队列长度(size()):要求时间复杂度在常量级别
判满( bool full())
判空(bool empty())
运行结果:
#include <iostream>
#define MAX_SIZE 7
using namespace std;
class Stack
{
private:
int arr[MAX_SIZE];
int front_sub = 0;
int rear_sub = 0;
public:
Stack():front_sub(0),rear_sub(0)
{
}
int push(int value) //入队
{
if(full())
return -1;
else
{
arr[rear_sub] = value;
rear_sub = (rear_sub + 1) % MAX_SIZE;
return 0;
}
}
void pop() //出队
{
cout << "出队";
if(!empty())
front_sub = (front_sub + 1) % MAX_SIZE;
}
void show() //输出
{
if(!empty())
{
cout << "输出的结果是:";
int i = front_sub;
for(i;i!=rear_sub;i=(i+1)%MAX_SIZE)
{
cout << arr[i] << " ";
}
cout << endl;
}
}
int size() //求长度
{
return (rear_sub + MAX_SIZE - front_sub)%MAX_SIZE;
}
bool full() //判空
{
return (rear_sub + 1) % MAX_SIZE == front_sub;
}
bool empty() //判满
{
return front_sub==rear_sub;
}
};
int main()
{
Stack s;
int num = 0;
int len = 0;
cout << "请输入要入队的数据的个数:";
cin >> len;
cout << "请输入要入队的数据:";
for(int i = 0;i<len;i++)
{
cin >> num;
s.push(num);
}
s.show();//输出
s.pop();//出队
s.show();//输出
cout<<"队列长度= "<<s.size()<<endl;//队列长度
cout<<"是否队满= "<<s.full()<<endl;//是否队满
cout<<"是否为满= "<<s.empty()<<endl;//是否队满
cout << "Hello World!" << endl;
return 0;
}