2020-10-27 可以用动态分配来实现循环队列,但是不可以在队列空间不够的时候扩大循环队列的空间

本文探讨了如何使用动态分配创建循环队列,但指出在队列空间不足时,不能直接扩展循环队列的容量。文章深入讨论了循环队列的数据结构特性和在算法中的应用。

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

//该程序为了判断严蔚敏《数据结构》P63的“C语言不能用动态分配的一维数组来实现循环队列” 的正确与否
//结果证明:可以用动态分配来实现循环队列,而且可以在队列空间不够的时候扩大循环队列的空间
//分割线:---------------------------------------------------
//做题时,发现循环队列不能像顺序栈一样扩大空间,之前的认识是错误的,书中说法是正确的
//原因如下:
//循环队列的空间是由base开辟的,扩大也是由base扩大的,
//扩大后会在对于base的最后的位置开辟,而不总是tail的后面
//若head遍历到tail的过程中不经过新开辟的空间,正确
//原因:tail+1(即tail向后移),新的tail会指向新开辟的空间
//但若head遍历到tail的过程中经过了新开辟的空间,就会出现错误
//原因:“扩大”后tail+1(即tail向后移),新的tail根本就没指在新开辟的空间上
//而会与head重合,导致Output()无任何输出
//结论:循环队列不要再扩大空间,你可以初始化的时候把空间弄大些

#include<iostream>
using namespace std;
#define QElemType double
const int InitQueueSize=3;
const int QueueIncrement=2;

typedef struct
{
    QElemType* base;
    int QueueSize;
    int head,tail;
}SqQueue;

bool Init_Queue(SqQueue& Q)//初始化循环队列
{
    Q.base=new QElemType[InitQueueSize];
    if(!Q.base) exit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值