c語言:循環隊列的實現

#include<iostream>
#include<stdio.h>
#include<math.h>
#define QUEUE_MAX_SIZE 100
using namespace std;
typedef struct Sqqueue
{
	int  *data;
	int front;
	int rear;
}Sqqueue;
//函數聲明
void Error(char *s);                           //錯誤處理函數
void Destroy_Sqqueue(Sqqueue &q);				//銷燬循環隊列函數
void Clear_Sqqueue(Sqqueue &q);					//清除循環隊列函數
int Getlength_Sqqueue(Sqqueue &q);				//得到循環隊列的長度
void Gethead_Sqqueue(Sqqueue &q, int e);		//取循環隊列的對頭元素
void En_Sqqueue(Sqqueue &q, int e);				//入隊操作
void De_Sqqueue(Sqqueue &q, int e);				//出隊操作
Sqqueue Creat_Sqqueue();						//創建一個循環隊列
void Print_Sqqueue(Sqqueue &q);					//以此輸出循環隊列的值
//函數定義
void Error(char *s)
{
	cout << s << endl;
	exit(1);
}
Sqqueue Creat_Sqqueue()
{
	Sqqueue  q;
	q.data = new int[QUEUE_MAX_SIZE];
	if (!q.data)
		Error("存儲分配失敗!");
	q.front = q.rear = 0;
	int length = 0;
	int number = 0;
	cout << "請輸入循環隊列的長度:";
	cin >> length;
	cout << "請輸入循環隊列的值:";
	for (int i = 0; i < length; i++)
	{
		cin >> number;
		q.data[q.rear] = number;
		q.rear = (q.rear + 1) % QUEUE_MAX_SIZE;
	}
	return q;
}
void Destroy_Sqqueue(Sqqueue &q)
{
	delete[] q.data;
	q.front = q.rear = 0;
	cout << "該循環隊列銷燬成功!";
}
void Clear_Sqqueue(Sqqueue &q)
{
	q.front = q.rear = 0;
}
int Getlength_Sqqueue(Sqqueue &q)
{
	int Queuelength = (q.rear - q.front + QUEUE_MAX_SIZE) % QUEUE_MAX_SIZE;
	return Queuelength;
}
void Gethead_Sqqueue(Sqqueue &q,int e)
{
	if (q.rear == q.front)
		Error("該循環隊列爲空!");
	e = q.data[q.front];
	cout << "該循環隊列的隊頭元素是:" << e << endl;
}
void En_Sqqueue(Sqqueue &q, int e)
{
	if (((q.rear + 1) % QUEUE_MAX_SIZE) == q.front)
		Error("該循環隊列已滿!");
	q.data[q.rear] = e;
	q.rear = (q.rear + 1) % QUEUE_MAX_SIZE;
}
void De_Sqqueue(Sqqueue &q, int e)
{
	if (q.front == q.rear)
		Error("該循環隊列爲空隊列!");
	e = q.data[q.front];
	q.front = (q.front + 1) % QUEUE_MAX_SIZE;
	cout << "出隊的元素是:" << e << endl;
}
void Print_Sqqueue(Sqqueue &q)
{
	cout << "該循環隊列的元素是:";
	while (q.front != q.rear)
	{
		cout << q.data[q.front] << " ";
		q.front = (q.front + 1) % QUEUE_MAX_SIZE;
	}
	cout << endl;
}

int main()
{
	Sqqueue Q;
	int e = 0;
	Q = Creat_Sqqueue();
	cout << "該循環隊列的長度是:"<<Getlength_Sqqueue(Q) << endl;
	Gethead_Sqqueue(Q, e);
	cout << "請輸入要入隊的元素:";
	cin >> e;
	En_Sqqueue(Q, e);
	De_Sqqueue(Q, e);
	Print_Sqqueue(Q);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章