3.8循环队列队尾删除及队头插入算法

题目:如果允许在循环队列的两端都可以进行插入和删除操作。要求:
① 写出循环队列的类型定义;
② 写出“从队尾删除”和“从队头插入”的算法。

①定义循环队列:

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

猜你喜欢

转载自blog.csdn.net/qq_39688282/article/details/108285942