和乐i 2020-07-17 16:05 采纳率: 100%
浏览 119
已采纳

循环链表初始化无法完成,求大佬解惑

代码如下,初始化中的“初始化成功”一句都没有打印出来

#include<iostream> 
#include<malloc.h>
#include<conio.h>
#define MAXSIZE 6
using namespace std;

typedef int datatype;
struct sequeue{
    datatype data[MAXSIZE];
    int front,rear; 
};
struct sequeue *sq;

//初始化
sequeue *SetNULLQ(sequeue *sq)
{
    sq->front=MAXSIZE-1;
    sq->rear=MAXSIZE-1;
    cout<<"初始化成功"<<endl;
    return sq;
} 

//入队
sequeue *EnQueueQ(sequeue *sq,datatype x)
{
    if(sq->front==((sq->rear+1)%MAXSIZE))
    {
        cout<<"队伍已满,无法入队"<<endl;
        return sq; 
    }
    else
    {
        sq->rear=(sq->rear+1)%MAXSIZE;
        sq->data[sq->rear]=x;
        cout<<x<<"已入队"<<endl;
        return sq;
    }
}

//出队 
sequeue *DeQueueQ(sequeue *sq)
{
    if(sq->front==sq->rear)
    {
        cout<<"队伍为空,无法出队"<<endl;
        return NULL; 
    }
    else
    {
        sq->front=(sq->front+1)%MAXSIZE;
        cout<<"队头已出队"<<endl;
        return sq;
    }
}

//取队头元素
datatype *GetFrontQ(sequeue *sq)
{
    if(sq->front==sq->rear)
    {
        cout<<"队伍为空,无法取队头元素"<<endl;
        return NULL; 
    }
    else
    {
        datatype *ret;
        ret=(datatype *)malloc(sizeof(datatype));
        *ret=sq->data[(sq->front+1)%MAXSIZE];
        return ret; 
    } 

}

int main()
{
    sq=SetNULLQ(sq);
    datatype x;
    while((x=getche())!='#')
    {
        sq=EnQueueQ(sq,x);
    }
    cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
    sq=DeQueueQ(sq);
    cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
}
  • 写回答

2条回答 默认 最新

  • 鞠杉 2020-07-18 09:32
    关注

    我已经修改代码如下:

    #include<iostream> 
    #include<malloc.h>
    #include<conio.h>
    #define MAXSIZE 6
    using namespace std;
    
    typedef int datatype;
    struct sequeue{
        datatype data[MAXSIZE];
        int front,rear; 
    };
    //struct sequeue *sq;个人感觉没有必要使用全局变量 
    
    //初始化
    sequeue *SetNULLQ(sequeue *sq)
    {
        sq->front=MAXSIZE-1;
        sq->rear=MAXSIZE-1;
        cout<<"初始化成功"<<endl;
        return sq;
    } 
    
    //入队
    sequeue *EnQueueQ(sequeue *sq,datatype x)
    {
        if(sq->front==((sq->rear+1)%MAXSIZE))
        {
            cout<<"队伍已满,无法入队"<<endl;
            return sq; 
        }
        else
        {
            sq->rear=(sq->rear+1)%MAXSIZE;
            sq->data[sq->rear]=x;
            cout<<x<<"已入队"<<endl;
            return sq;
        }
    }
    
    //出队 
    sequeue *DeQueueQ(sequeue *sq)
    {
        if(sq->front==sq->rear)
        {
            cout<<"队伍为空,无法出队"<<endl;
            return NULL; 
        }
        else
        {
            sq->front=(sq->front+1)%MAXSIZE;
            cout<<"队头已出队"<<endl;
            return sq;
        }
    }
    
    //取队头元素
    datatype *GetFrontQ(sequeue *sq)
    {
        if(sq->front==sq->rear)
        {
            cout<<"队伍为空,无法取队头元素"<<endl;
            return NULL; 
        }
        else
        {
            datatype *ret;
            ret=(datatype *)malloc(sizeof(datatype));
            *ret=sq->data[(sq->front+1)%MAXSIZE];
            return ret; 
        } 
    
    }
    
    int main()
    {
        sequeue seq;//创建一个结构体对象 
        sequeue *sq=&seq;//创建一个结构体指针,指向所创建的结构体对象 
    
        sq=SetNULLQ(sq);
        datatype x;
        while((x=getche())!='#')
        {
            sq=EnQueueQ(sq,x);
        }
        cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
        sq=DeQueueQ(sq);
        cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
    }
    
    

    能够正常运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮