顺序队列的入队,出队,遍历队列计算队列的长度

该博客介绍如何使用C语言实现顺序队列,包括初始化队列、判断队列是否为空、入队、出队、遍历队列以及计算队列长度的函数实现,并提供了一个主函数示例来演示这些操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdio.h"
#include "stdlib.h"
#define N 100
#define TRUE 1
#define FALSE 0
typedef struct queue{
int data[N];
int front, rear;
}*pqueue,lqueue;


//置空队列
int empty(pqueue p)
{

p->front = p->rear = 0;
printf("队列已经置空!\n");
return TRUE;
}


//判断队列是否为空
int isempty(pqueue p)
{
if (p->front == p->rear)
{
printf("队列为空!\n");
return FALSE;
}
else
printf("对列不为空!\n");
return TRUE;
}


//入队操作
int enqueue(pqueue p)
{
循环队列是一种特殊的线性表数据结构,它通过将队列的头部和尾部相连,使得当队列满时,新的元素添加到尾部,而旧的元素从头部删除,形成一种“头进尾出”的循环效果。在数组中实现循环队列,通常涉及到以下操作: 1. **队列长度**:在循环队列中,计算长度时需要注意边界条件。如果你有一个固定大小的数组作为队列容器,你可以维护两个指针:`front`表示队首元素的下一个位置,`rear`表示最后一个添加元素的位置。如果`rear - front`超过数组大小减一(因为`front == rear`时,表示队列为空),则实际队列长度为`(array_size - (front - rear)) % array_size`。 2. **入队(enqueue)**:当有新元素需要加入时,先检查队列是否已满。若未满,则将新元素放在`rear`位置,并更新`rear`指针。如果已满,则移动`front`指针,直到找到空位。 3. **出队(dequeue)**:取队首元素时,同样判断队列是否为空。非空则返回`front`处的元素,然后将`front`向后移动一位;如果队列为空,直接返回特殊值(如`None`)。 4. **遍历**:可以通过一个for循环或while循环,从`front`开始逐个访问每个元素,直到遇到`front == rear`的情况。 5. **取队头(peek)**:队头是指当前队列中第一个元素,但是不会移除它。所以队头位置是`front`,可以直接读取,不需要特殊处理。 下面是Python代码示例: ```python class CircularQueue: def __init__(self, capacity): self.queue = [0] * capacity self.front = -1 self.rear = -1 # 添加元素 def enqueue(self, value): if self.is_full(): return False if self.is_empty(): self.front = 0 else: self.rear = (self.rear + 1) % len(self.queue) self.queue[self.rear] = value return True # 删除元素 def dequeue(self): if self.is_empty(): return None removed_value = self.queue[self.front] if self.front == self.rear: self.front = self.rear = -1 else: self.front = (self.front + 1) % len(self.queue) return removed_value # 返回队列长度 def length(self): if self.is_empty(): return 0 elif self.front > self.rear: return len(self.queue) - (self.front - self.rear) else: return self.rear - self.front + 1 # 判断队列是否为空 def is_empty(self): return self.front == -1 # 判断队列是否已满 def is_full(self): return self.length() == len(self.queue) # 使用示例 cq = CircularQueue(5) cq.enqueue(1) cq.enqueue(2) print(cq.dequeue()) # 输出:1 print(cq.length()) # 输出:1 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值