题目:如果允许在循环队列的两端都可以进行插入和删除操作。要求:
① 写出循环队列的类型定义;
② 写出“从队尾删除”和“从队头插入”的算法。
①定义循环队列:
#define MAXSIZE 10;
typedef struct{
Elemtype data[MAXSIZE];
int front;//队头指针
int rear;//队尾指针
}SqQueue;
②从队尾删除:
Status DeQueue(SqQueue &S,int &x){
//&S为出队队列;x存储出队元素的值
if(S.front==S.rear){
//头指针等于尾指针,队空
return ERROR;
}else{
x=S.data[S.rear]; //x取队尾元素的值
S.rear=(S.rear-1+MAXSIZE)%MAXSIZE; //尾指针前移
return OK;
}
}
从队头插入:
Status EnQueue(SqQueue &S,int &x){
//x为要插入的元素
if(S.rear==(S.front-1+MAXSIZE)%MAXSIZE){
//队满
return ERROR;
}else{
S.data[S.front]=x; //x赋值给头结点的data域
S.front=(S.front-1+MAXSIZE)%MAXSIZE; //头结点前移
return OK;
}
}