局部变量-为什么这个循环队列程序出错

问题描述

为什么这个循环队列程序出错
#include<malloc.h>
typedef struct Queue
{
    int *pBase;
    int front;
    int rear;
}QUEUE,*PQUEUE;
void init(PQUEUE pQ);//初始化队列
bool en_queue(PQUEUE pQ,int val);//向队列里放入数据
void traverse(PQUEUE pQ);//遍历队列
bool full_queue(PQUEUE pQ);//判断队列是否为满
int main()
{
    PQUEUE Q;
    init(Q);
    en_queue(Q,1);

    traverse(Q);
    return 0;
}
void init(PQUEUE pQ)
{
    pQ->pBase=(int*)malloc(sizeof(int)*6);
    pQ->front=0;
    pQ->rear=0;
}
bool en_queue(PQUEUE pQ,int val)
{
    if(full_queue(pQ))
    {
        printf("队列已满
");
        return false;
    }
    else
    {
        pQ->pBase[pQ->rear]=val;
        pQ->rear=(pQ->rear + 1)%6;
        return true;
    }
}
bool full_queue(PQUEUE pQ)
{
    if((pQ->rear + 1)%6==pQ->front)
    {
        return true;
    }
    else
    {
        return false;
    }
}
void traverse(PQUEUE pQ)
{
    while(pQ->front!=pQ->rear)
    {
        printf("%d ",pQ->pBase[pQ->front]);
        pQ->front=(pQ->front + 1)%6;
    }
    return;
}

这个程序重是报错,在VS2008的C++的环境下运行,报错提示为:队列.cpp(16) : warning C4700: 使用了未初始化的局部变量“Q”

解决方案

因为你真的没有初始化,Q是个指针,你又不为它分配空间,然后又直接用了,当然报错啦。

解决方案二:

循环队列
循环队列
循环队列

时间: 2024-12-23 08:25:32

局部变量-为什么这个循环队列程序出错的相关文章

数据结构的C++实现之队列的顺序存储结构(循环队列)

队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.是一种先进先出的线性表(FIFO). 允许插入的一端称为队尾,允许删除的一端称为队头.我们在<栈的顺序存储结构>中发现,栈操作的top指针在Push时增 大而在Pop时减小,栈空间是可以重复利用的,而队列的front.rear指针都在一直增大,虽然前面的元素已经出队了,但它 所占的存储空间却不能重复利用.但大多数程序并不是这样使用队列的,一般情况下出队的元素就不再有保存价值了,这些 元素的存储空间应该回收利用,由此想

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-1后的示意图: 上图中,a0是当前 队头数据元素,an-1是当前 队尾数据元素. 为了

python 做的web 暴力猜解密码程序 出错

问题描述 python 做的web 暴力猜解密码程序 出错 在Linux环境下运行 这是错误: Traceback (most recent call last): File "brute.py", line 15, in response = urllib2.urlopen(req,timeout=100) File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen return _opener.open(

C++循环队列实现模型_C 语言

本文实例讲述了C++循环队列实现模型.分享给大家供大家参考.具体分析如下: 前段时间在知乎上看到这样一个小题目: 用基本类型实现一队列,队列要求size是预先定义好的的.而且要求不可以使用语言自带的api,如C++的STL.普通的实现很简单,但是现在要求要尽可能的时间和空间复杂度的优化,要和语言自带的api比较时间和空间.这个队列还要支持如下的操作: constructor: 初始化队列 enqueue:入队 dequeue:出队 队列是一种基本的数据结构,在平常的应用中十分广泛,多数情况队列都

c++-(C++)小白来提问,程序出错。

问题描述 (C++)小白来提问,程序出错. #include using namespace std; double capital = 0.0; double cal(int num, double quantity) { switch (num) { case 0: return quantity*1.50; case 1: return quantity*1.70; case 2: return quantity*4.60; case 3: return quantity*0.90; ca

【算法导论】程序出错的解释说明

我在博客的所有程序是在vs2008上运行的,与vc 6.0有点区别,主要是循环体中的循环变量的作用域(vs2008相比vc 6.0更加遵循了C标准),如果程序出错,则主要体现在循环变量的重复定义上. 例如:在vs2008或vs2010上,程序为: #include<stdio.h> void main() {int i=0;for(int i=0;i<5;i++)//i的作用域只在本循环语句内printf("%d ",i); } 则在VC 6.0上需改为: #incl

详解数据结构C语言实现之循环队列_C 语言

本文讲的是循环队列,首先我们必须明白下面几个问题 循环队列的基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,front指向队列的第一个元素,rear指向队列最后一个元素的下一个位置: (3)当队列为空时,front与rear的值相等,但不一定为零: 3.循环队列入队的伪算法 (1)把值存在rear所在的位置: (2)rear=(rear+1)%maxsize

大话数据结构八:队列的顺序存储结构(循环队列)

1. 什么是队列? 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 2. 队列的特点: 队列是一种先进先出(First In First out)的线性表,允许插入的一端称为队尾,允许删除的一端称为队头. 3. 队列顺序存储有什么不足? 使用数组实现的顺序存储,当做出队列操作时,所有的元素都需要向前移动一位,性能很低. 4. 什么是循环队列? 队列头尾相接的顺序存储结构称为循环队列. 如图所示:front记住队头元素下标,rear记住队尾元素的下一个元素. 注意:

Win8系统安装KB2770917程序出错的解决方案

Win8更新程序(KB2770917)安装失败怎么办?很多用户在Windows8系统下重启更新程序时遇到更新失败状况,之后系统就自动执行回滚操作,关于这个问题,系统高手给出了以下的解决方案. Win8系统安装KB2770917程序出错的解决方案: 1.利用Win + R快捷键调出"运行"对话框,输入"msconfig",确定运行,打开"系统配置"窗口; 2.切换到"服务"选项卡,勾选下面的"隐藏所有Microsoft