循環隊列:
結構:
typedef struct
{
ElemType *data;
int front;
int rear;
}SqQueue;
- 初始化隊列
初始化隊列讓Q.front = Q.rear = 0 即可
- 判隊空
判空 判斷等式是否成立: Q.front == Q.rear
- 判隊滿
判隊滿 因爲循環隊列會空出來一個位置
(Q.rear + 1) % MAXSIZE == Q,front
- 入隊
讓隊尾指針後移,後移之後再輸入元素
- 出隊
代碼:
#ifndef _SQQUEUE_H_
#define _SQQUEUE_H_
#include <iostream>
#include <fstream>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 5
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *data;
int front;
int rear;
}SqQueue;
Status initSqQueue(SqQueue &Q)
{
Q.data = (ElemType *)malloc(sizeof(ElemType) * MAXSIZE);
if (!Q.data)
{
cout << "空間不足";
return ERROR;
}
Q.front = Q.rear = 0;
}
bool isEmpty(SqQueue &Q)
{
if (Q.front == Q.rear)
return true;
return false;
}
bool isFull(SqQueue &Q)
{
if ((Q.rear + 1) % MAXSIZE == Q.front)
return true;
return false;
}
Status EnQueue(SqQueue &Q, ElemType e)
{
if (isFull(Q))
{
cout << "隊滿,無法插入元素\n";
return OVERFLOW;
}
Q.rear = (Q.rear + 1) % MAXSIZE;
Q.data[Q.rear] = e;
return OK;
}
Status DeQueue(SqQueue &Q, ElemType &e)
{
if (isEmpty(Q))
{
cout << "隊空,無法刪除元素\n";
return ERROR;
}
Q.front = (Q.front + 1) % MAXSIZE;
e = Q.data[Q.front];
return OK;
}
void Visit(SqQueue Q)
{
int p = (Q.front + 1) % MAXSIZE;
if (p <= Q.rear)
{
for (p; p <= Q.rear; p++)
cout << Q.data[p] <<" ";
}
else
{
for (p; p < MAXSIZE; p++)
cout << Q.data[p] <<" ";
p = 0;
for (p; p <= Q.rear; p++)
cout << Q.data[p] <<" ";
}
cout << endl;
}
#endif