为区分队空队满有3种处理方式:
①牺牲一个单元
②增设表示元素个数的数据成员
③增设tag数据成员
1.front->队头元素,rear->队尾元素下一位置
1.1牺牲一个单元
1.1.1定义
#define MaxSize 50
typedef struct {
ElemType data[MaxSize];
int front, rear;
}SqQueue;
1.1.2初始化
void InitQueue(SqQueue &Q) {
Q.rear = Q.front = 0;
}
1.1.3判空
bool isEmpty(SqQueue Q) {
if(Q.rear = Q.front)
return true;
else
return false;
}
1.1.4 入队
bool EnQueue(SqQueue &Q, ElemType x) {
if((Q.rear + 1) % MaxSize == Q.front)//队满报错
return false;
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
1.1.5出队
bool DeQueue(SqQueue &Q, ElemType &x) {
if(Q.rear = Q.front)//队空报错
return false;
x = Q.data[Q.front];
Q.front= (Q.front+ 1) % MaxSize;
return true;
}
1.1.6 读队头元素
bool GetHead(SqQueue &S, ElemType &x) {
if(Q.rear = Q.front)//队空报错
return false;
x = Q.data[Q.front];
return true;
}
1.2增设表示元素个数的数据成员
1.2.1定义
#define MaxSize 50
typedef struct {
ElemType data[MaxSize];
int front, rear;
int size;
}SqQueue;
1.2.2初始化
void InitQueue(SqQueue &Q) {
Q.rear = Q.front = 0;
Q.size = 0;
}
1.2.3判空
bool isEmpty(SqQueue Q)