QUEUE

队列

// 初始化队列
void initialQueue(Queue &Q) {
    // plist指向一个用于存储节点地址的顺序表
    Q.pList = (ElemType *)malloc(sizeof(ElemType) * MAX_SIZE);
    //这个特殊的顺序麦只能在rear存入数据,且rear永远指向下一个存储数据的空白单元
    //front指向已经存储进去的元素 且front永远指向未来第一个要出队列的数据所在单元
    //队刻为空时front指向rear(空白数据单元)
    // 队列为空,所以将front和rear都设置为0
    Q.front = 0;
    Q.rear = 0;
}

在队尾插入数据

void enqueue(Queue &Q, ElemType element) {
// 进队列首先应该判断是否满。插入的位置是在rear位置的下一个。
// 一旦入队列后,rear会将数据移到下一个位置pos,。如果pos是front则front=rear;
// 如果rear等于front,则队列满了,因为之前规定front = rear为队空,但实际上队列是满的,为了解决这个矛盾。
// 将 (rear + 1) % MAX_SIZE == front 视为队列满,即不能再插入数据,避免溢出,牺牲掉一个空白单元。
    int nextInsertPos = (Q.rear + 1) % MAX_SIZE;
    //在rear当前指向的存储单元写入数据
    Q.pList[Q.rear] = element;
    Q.rear = (Q.rear + 1) % MAX_SIZE; 
}
// 从队头出队数据
ElemType dequeue(Queue &Q) {
    // 获取队头元素,然后将front向后移动一位
    ElemType element = Q.pList[Q.front];
    Q.front = (Q.front + 1) % MAX_SIZE;
    
    return element;
}
// 检查队列是否为空,返回1表示空,返回0表示非空
int isEmpty(Queue &Q) {
    if (Q.front == Q.rear) {
        return 1; // 队列为空
    } else {
        return 0; // 队列非空
    }
}

// 检查队列是否已满,返回1表示满,返回0表示未满
int isFull(Queue &Q) {
    if ((Q.rear + 1) % MAX_SIZE == Q.front) {
        return 1; // 队列已满
    } else {
        return 0; // 队列未满
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值