| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 546 人关注过本帖
标题:关于环形队列的出队问题 程序有点问题 帮忙看看
只看楼主 加入收藏
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
结帖率:100%
  已结贴   问题点数:20  回复次数:1   
关于环形队列的出队问题 程序有点问题 帮忙看看
//环形队列基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int front,rear;        //队首和队尾指针
} SqQueue;
//初始化队列
void InitQueue(SqQueue *&q)
{    q=(SqQueue *)malloc (sizeof(SqQueue));
    q->front=q->rear=-1;
}
//销毁队列
void DestroyQueue(SqQueue *&q)
{
    free(q);
}
//判断队列是否为空
bool QueueEmpty(SqQueue *q)
{
    return(q->front==q->rear);
}
//进队列
bool enQueue(SqQueue *&q,ElemType e)
{    if ((q->rear+1)%MaxSize==q->front)    //队满上溢出//if ((q->rear==MaxSize-1);
        return false;
    q->rear=(q->rear+1)%MaxSize;//q->rear++;
    q->data[q->rear]=e;
    return true;
}
//出队列
bool deQueue(SqQueue *&q,ElemType &e)
{    if (q->front==q->rear)        //队空下溢出
        return false;
    q->front=(q->front+1)%MaxSize;//q->front++;
    e=q->data[q->front];
    return true;
}
int main()//主函数
{

    int n;
    char i;
    ElemType e;
    SqQueue *sq;
    InitQueue(sq);
    printf("(1)队列q已被初始化!\n");
    printf("(2)队列");
    if(QueueEmpty(sq))
        printf("为空队列!");
    else
        printf("不为空队列!");
    printf("\n");
    printf("(3)请输入元素的个数:");
    scanf("%d",&n);
    printf("请输入要入队列的元素:");

    for(i=0;i<n;i++)
    {   enQueue(sq,e);
        scanf("%*c%c",&e);

    }

    if(enQueue(sq,e))
        printf("入队列成功!");
    else{
        printf("入队列不成功!");
    }
    printf("\n");
    //出队一个元素
    printf("(4)出队一个元素为");
    deQueue(sq,e);
   if(deQueue(sq,e)==0)
      printf("队空");
    else
       printf("%c",e);
    printf("\n");
    fflush(stdin);
    printf("(5)请输入继续入队列的元素:");
    for(i=0;i<n;i++)
    {   enQueue(sq, e);
        scanf("%c",&e);

    }

    printf("(6)队列q的出队列序列为");

    while(!(QueueEmpty(sq))){

     printf("%c",e);
     deQueue(sq,e);

    }

    printf("\n");

    DestroyQueue(sq);
    printf("(7)队列q已被释放!");
    system("pause");

}
程序正确的出队应该是bcdef    请大佬们帮下忙 感谢
附件: 您没有浏览附件的权限,请 登录注册
2018-10-28 15:39
MeandC
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:8
帖 子:245
专家分:792
注 册:2018-7-14
  得分:20 
发现和你学的数据结构有点差别。看一下我的代码,我学的队列的定义。
单链队列
程序代码:
typedef struct qnode{
elemtype data;
struct qnode *next;
}qnode,*queueptr;
typedef struct{
queueptr front;//队头指针
queueptr rear;//队尾指针
}linkqueue;

循环队列
程序代码:
typedef struct{
elemtype *base;
int front;
int frear;
}queue;

循环队列不能增加长度。
代码有点不一样,看起来费劲,没时间看,你自己花时间去调试就好了。

C果然是有点难啊!
2018-10-29 17:44







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026126 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved