天天看點

資料結構——隊列——C++實作隊列及其操作

      隊列的存儲結構有兩種:順序存儲結構和鍊式存儲結構,稱為順序隊列和鍊隊列,在順序隊列中,隊列滿時進行入隊操作産生“上溢”,為解決“上溢”問題,可以使用循環隊列。

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;
}