C语言以数组Q[m]存放循环队列中的元素,同时设置一个标志tag,以tag=0和tag=1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。编写与此结构相应的插入(enqueue)和删除(dequeue)算法。用代码展示
时间: 2024-06-01 22:12:29 浏览: 86
抱歉,我可以回答您的问题。
以下是C语言中循环队列的插入和删除算法的代码:
//定义队列结构体
typedef struct {
int *Q; //队列数组指针
int front; //队头指针
int rear; //队尾指针
int tag; //标志,0表示队列为空,1表示队列为满
int m; //队列长度
}Queue;
//初始化队列
void InitQueue(Queue *Q, int m) {
Q->Q = (int*)malloc(m * sizeof(int)); //分配数组空间
Q->front = Q->rear = 0; //队头队尾指针初始化为0
Q->tag = 0; //队列为空
Q->m = m; //队列长度为m
}
//插入元素
void Enqueue(Queue *Q, int x) {
if(Q->tag == 1) { //队列已经满了,无法插入
printf("队列已满,无法插入!\n");
return;
}
Q->Q[Q->rear] = x; //将元素x插入队尾
Q->rear = (Q->rear + 1) % Q->m; //队尾指针后移一位,注意取模
if(Q->rear == Q->front) //队尾指针与队头指针相等,队列已满
Q->tag = 1;
}
//删除元素
int Dequeue(Queue *Q) {
int x;
if(Q->tag == 0) { //队列为空,无法删除
printf("队列为空,无法删除!\n");
return -1;
}
x = Q->Q[Q->front]; //取出队头元素
Q->front = (Q->front + 1) % Q->m; //队头指针后移一位,注意取模
if(Q->front == Q->rear) //队头指针与队尾指针相等,队列已空
Q->tag = 0;
return x;
}
笑话:为什么程序员总是把11当成一个很重要的数字?
因为11进制刚好是3个4!
阅读全文