队列的顺序存储结构——基本操作的实现

队列简介:只允许在一端进行插入操作,而另一端进行删除操作的线性表。同时,队列的元素除了具有线性关系之外,还具有先进先出的特点。

 

文章内容:入队、出队、读取队头元素等操作的代码以及实现结果截图


队列类的定义

#include
#include
using namespace std;
const int QueueSize=100;

class Cirqueue
{
public:
	Cirqueue(){front=rear=QueueSize-1;}   /*初始化一个空队列*/
	~Cirqueue(){};
	void Enqueue(string x);   /*将x入队*/
	string Getqueue();  /*弹出队头元素*/
	string Dequeue();   /*出队*/
	int Empty(){   /*判断队是否为空*/
		if(front==rear)
	   {
		    return 1;
		}
		else{
			return 0;
		} 
	}
private:
	string data[QueueSize];  /*存放栈元素的数组*/
	int front;
	int rear;
};

成员函数的定义

void Cirqueue::Enqueue(string x)
{
	if((rear+1)%QueueSize==front) throw "上溢";
	else{
	  rear=(rear+1)%QueueSize;
	  data[rear]=x;
	}
}

string Cirqueue::Getqueue()
{
  if(rear==front) throw"下溢";
  else{
	int i=(front+1)%QueueSize;  //不要给队头指针赋值,只要取出一个
	return data[i];
  }
   
}

string Cirqueue::Dequeue()
{
  if(rear==front) throw"下溢";
  else{
	front=(front+1)%QueueSize;  // 在循环意义上加1
	return data[front];
  }
   
}

主函数

int main()
{
        string a[100];
		string i;
		Cirqueue one;
		one.Enqueue("小明");
		one.Enqueue("小红");
		one.Enqueue("小李");
		cout<<'\n'<<"请输入入队人的姓名"<>i;
		one.Enqueue(i);
		if(one.Empty())
		{
			cout<<"队伍没有人!"; 
		}
		else
		{
			cout<<'\n';
			cout<<"队伍有人!"; 
			cout<<'\n'<<"队列第一个人是:";
			cout<

运行截图

队列的顺序存储结构——基本操作的实现_第1张图片


心得:

1. 要注意这种循环队列的判空操作为:front==rear是否成立,若成立则为空,反之则反;还有队满的判断条件可以设置为:(rear+1%QueueSize=from.

2. 初始化一个空的循环队列,只需要将队头指针和队尾指针同时指向数组的某一位置,一般是数组的高端。

3.循环队列的入队和出队操作都比较容易,入队只需要将尾指针rear在循环下加一,而出队只需要将队头指针front在循环下加一。

 


你可能感兴趣的:(数据结构C++实现)