隊列的存儲結構有兩種:順序存儲結構和鍊式存儲結構,稱為順序隊列和鍊隊列,在順序隊列中,隊列滿時進行入隊操作産生“上溢”,為解決“上溢”問題,可以使用循環隊列。
C++實作隊列的建構和操作:
1:隊列的結構體定義
2:置空隊列
3:判斷是否為空隊列
4:進隊
5:出隊
6:顯示整個隊中元素
切記親力親為,動手實踐寫代碼
Queue.h
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype data[MAXSIZE];
int front,rear; //表示隊列的頭尾位置
}Queue;
//置空隊列
bool Set_NULL(Queue &Q);
//判斷隊列是否為空
bool Is_NULL(Queue Q);
//入隊
bool En_Queue(Queue &Q,datatype a);
//出隊
bool De_Queue(Queue &Q);
//取隊列頭元素
datatype front_element(Queue Q);
//顯示隊列元素
bool show(Queue Q);
Queue.cpp
#include "Queue.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
//隊列狀态說明:
//front = -1 rear = -1 空隊列
//front = -1 rear != -1 有元素隊列
//front != -1 rear != -1 有元素出隊列
//置空隊列
bool Set_NULL(Queue &Q)
{
Q.front = -1;
Q.rear = -1;
return true;
}
//判斷隊列是否為空
bool Is_NULL(Queue Q)
{
if (Q.front == Q.rear)
{
return true; //隊頭等于隊尾,為空
}
return false;
}
//入隊
bool En_Queue(Queue &Q,datatype a)
{
if ((Q.rear - Q.front) >= MAXSIZE-1)
{
cout<<"The queue is full~";
return false;
}
Q.rear += 1;
Q.data[Q.rear] = a;
return true;
}
//出隊
bool De_Queue(Queue &Q)
{
if (Is_NULL(Q))
{
cout<<"The queue is empty~";
return false;
}
Q.front += 1;
return true;
}
//取隊列頭元素
datatype front_element(Queue Q)
{
if (Is_NULL(Q))
{
cout<<"The queue is empty~";
return NULL;
}
return Q.data[Q.rear];
}
//顯示隊列元素
bool show(Queue Q)
{
if (Is_NULL(Q))
{
cout<<"The queue is empty~";
return false;
}
for (int i = Q.front;i < Q.rear;++i)
{
cout<<Q.data[i+1]<<" ";
}
return true;
}
main.cpp
#include "Queue.h"
#include <iostream>
using namespace std;
int main(int argc,char** argv)
{
Queue Q;
Set_NULL(Q); //置空
if (Is_NULL(Q)) //判斷是否為空
{
cout<<"The queue is empty"<<endl;
}
else
{
cout<<"The queue is not empty"<<endl;
}
En_Queue(Q,2);
En_Queue(Q,5);
En_Queue(Q,9);
En_Queue(Q,3);
En_Queue(Q,2);
show(Q);
De_Queue(Q);
cout<<endl;
cout<<"After the De_queue:";
show(Q);
cout<<endl;
cout<<"The rear element is:"<<front_element(Q);
system("pause");
return 0;
}