#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;
}
c語言:循環隊列的實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.