从流域到海域 2016-04-02 01:56 采纳率: 50%
浏览 6874
已采纳

要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 区分头尾指针相等的情况

我这个算法不知道为什么不能初始化,可能犯了很蠢的错误,求大神解答!!!

 /*循环队列_使用tag表示空或满_Solo*/
#include <stdio.h>

#define MAXSIZE 50
#define FALSE 0
#define TRUE  1

typedef char CSQueueElemType; 
typedef struct {
    CSQueueElemType elem[MAXSIZE];
    int front;
    int rear;
    int tag;
} CSQueue;
/*初始化*/
int InitCSQueue(CSQueue *Q) {
    Q->front = Q->rear = 0;
    Q->tag = 0;    //tag = 1表示队列已满

    return TRUE;
}
int EntCSQueue(CSQueue *Q, CSQueueElemType x) {
    if((Q->front == Q->rear) && (Q->tag == 1)) {
        printf("OVERFLOW");
        return FALSE; 
    }
    Q->rear = (Q->rear+1) % MAXSIZE;
    Q->elem[Q->rear] = x;

    if(Q->rear == Q->front) {
        Q->tag = 1;
    }
    return TRUE;
}
int DelCSQueue(CSQueue *Q, CSQueueElemType *x) {
    if((Q->front == Q->rear) && (Q->tag == 0)) {
        printf("EMPTY");
        return FALSE;
    }
    Q->front = (Q->front + 1) % MAXSIZE;
    *x = Q->elem[Q->front];

    if(Q->rear == Q->front) {
        Q->tag = 0;
    }
    return TRUE;
}
int main() {
    CSQueueElemType c;
    CSQueue Q;
    if(!InitCSQueue(&Q))
        return FALSE;
    while((c = getchar())!= '\n' );
        EntCSQueue(&Q, c);
    while(DelCSQueue(&Q,&c));
        putchar(c);

    return 0;
}
  • 写回答

1条回答

  • 小灸舞 2016-04-02 02:29
    关注

    while((c = getchar())!= '\n' );后面是不是多了个分号?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作