P!NK_MF 2022-04-01 15:16 采纳率: 60%
浏览 50
已结题

已经完成了队列的一系列基本操作,请问如何才能从键盘上输入元素至队列中呢?

typedef struct //队列的定义
{
char data[MAXSIZE];
int front;
int rear;
}Queue;

typedef int status;
status InitQueue(Queue &Q) //队列的初始化
{
Q.front=Q.rear=0;
return OK;
}

bool IsEmptyQ(Queue &Q) //判断队列是否为空
{
if (Q.front==Q.rear)
return true;
else
return false;
}

bool IsOverQ(Queue &Q) //判断队列是否为满
{
if (((Q.rear)%MAXSIZE)==Q.front) //这里就想到钟表来理解
return true;
else
return false;
}

status InQueue(Queue &Q,char x) //入队
{
if (IsOverQ(Q)) //队满不入
return ERROR;
else
printf("请输入要入队的元素:",x);
scanf("%d",&x);
Q.data[Q.rear]=x;
Q.rear++;
}

status OutQueue(Queue &Q,char &x) //出队
{
if (IsEmptyQ(Q)) //队空不出
return ERROR;
else
printf("%d",Q.front);
Q.front++;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-04-01 16:17
    关注

    修改如下,供参考:

    #include <stdio.h>
    #define OK 1
    #define ERROR 0
    #define MAXSIZE 50
    typedef struct queue//队列的定义
    {
        char data[MAXSIZE];
        int front;
        int rear;
    }Queue;
    typedef int status;
    status InitQueue(Queue& Q) //队列的初始化
    {
        Q.front = Q.rear = 0;
        return OK;
    }
    
    bool IsEmptyQ(Queue& Q) //判断队列是否为空
    {
        if (Q.front == Q.rear)
            return true;
        else
            return false;
    }
    
    bool IsOverQ(Queue& Q) //判断队列是否为满
    {
        if ((Q.rear - Q.front) > MAXSIZE) 
        //if (((Q.rear)%MAXSIZE)==Q.front) //这里就想到钟表来理解
            return true;
        else
            return false;
    }
    
    status InQueue(Queue& Q, char  x) //入队
    {
        if (IsOverQ(Q)) //队满不入
            return ERROR;
        else{
            //printf("请输入要入队的元素:", x);
            //scanf("%d", &x);
            Q.data[Q.rear] = x;
            Q.rear++;
        }
        return OK;
    }
    status OutQueue(Queue& Q, char & x) //出队
    {
        if (IsEmptyQ(Q)) //队空不出
            return ERROR;
        else{
            x = Q.data[Q.front];  
            Q.front++;
        }
        return OK;
    }
    int main()
    {
        int i;
        char  ch;
        Queue Q;
        InitQueue(Q);
        for (i = 0; i < 10; i++) //入队
            InQueue(Q, i + 'A');
    
        for (i = 0; i < 10; i++){//出队
            OutQueue(Q, ch);
            printf("%c\n", ch);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色
  • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
  • ¥15 字符串比较代码的漏洞
  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?