順序佇列與迴圈佇列
阿新 • • 發佈:2019-01-22
#define DataType int
#define MAXSIZE 100
using namespace std;
typedef struct _CirQueue
{
DataType data[MAXSIZE];
int front; //頭指標,隊非空時指向隊頭元素
int rear; //尾指標,隊非空時指向隊尾元素的下一位置
}CirQueue, *pCirQueue;
void InitQueue(pCirQueue pQueue);
bool Empty(pCirQueue pQueue);
bool InsertQueue(pCirQueue pQueue, DataType x);
DataType OutQueue(pCirQueue pQueue);
DataType GetHead(pCirQueue pQueue);
int GetLength(pCirQueue pQueue);
int _tmain(int argc, _TCHAR* argv[])
{
int len = 0, data;
CirQueue myQueue;
InitQueue(&myQueue);
if (!Empty(&myQueue))
{
printf("Queue is Empty");
}
InsertQueue(&myQueue, 1);
InsertQueue(&myQueue, 2);
InsertQueue(&myQueue, 3);
InsertQueue(&myQueue, 4);
len = GetLength(&myQueue);
data = GetHead(&myQueue);
while (Empty(&myQueue))
{
data = OutQueue(&myQueue);
cout<<endl<<data;
}
return 0;
}
//初始化:初始化一個新的佇列
void InitQueue(pCirQueue pQueue)
{
memset(pQueue, 0, sizeof(CirQueue));
}
//佇列非空判斷:若佇列不為空,則返回true;否則返回false。
bool Empty(pCirQueue pQueue)
{
if (pQueue->front != pQueue->rear)
{
return true;
}
else return false;
}
//入佇列:在佇列的尾部插入元素x,使元素x成為新的隊尾。若 佇列滿,則返回false;否則,返回true。
bool InsertQueue(pCirQueue pQueue, DataType x)
{
if ((pQueue->rear+1)%MAXSIZE != pQueue->front) //判斷佇列是否已滿
{
pQueue->data[pQueue->rear] = x;
pQueue->rear = (pQueue->rear + 1)%MAXSIZE;
return true;
}
else
return false;
}
//出佇列:若佇列不為空,則返回對頭元素,並從對頭刪除該元素,對頭指標指向原對頭的後記元素;否則,返回元素NULL
DataType OutQueue(pCirQueue pQueue)
{
DataType data;
if (pQueue->front == pQueue->rear)
{
return NULL;
}
else
{
data = pQueue->data[pQueue->front];
pQueue->front = (pQueue->front + 1)%MAXSIZE;
return data;
}
}
//取對頭元素:若佇列不空,則返回對頭元素;否則,返回空元素NULL
DataType GetHead(pCirQueue pQueue)
{
if (pQueue->front == pQueue->rear)
{
return NULL;
}
else
{
return pQueue->data[pQueue->front];
}
}
//求佇列長度
int GetLength(pCirQueue pQueue)
{
int length = 0, number = 0;
for (number = pQueue->front; number%MAXSIZE < pQueue->rear; number = (number+1)%MAXSIZE)
{
length++;
}
return length;
}
執行結果: