回 帖 发 新 帖 刷新版面

主题:写了个队列程序,哪里错了啊?

/*编写程序,从键盘上输入一个整数序列a1,a2,……,an,若ai>0,则ai进队列;若ai<0,则
对头元素出队列;当ai=0时算法结束。利用循环队列完成*/
#include<stdio.h>
#define MAXSIZE 5
typedef struct
{
  int *base;
  int front;
  int rear;
}cqueue;

/*函数声明*/
void fun(void);
int enqueue();
int outqueue();
void initqueue();
void list();

/*算法*/
void fun(void)
{
  cqueue cq;
  int x;
  int i;
  scanf("%d",&x);
  while(x!=0)
  {
    if(x>0)
    {
      if(!enqueue(&cq,x))
      { printf("The cycle queue is full!\n"); break;}
    }
    else if(!outqueue(&cq,&x))
    { printf("The cycle queue is empty!\n"); break;}
    scanf("%d",&x);
  }
  list(cq);
}

/*初始化队列*/
void initqueue(cqueue *cq)
{
  cq->base=(int *)malloc(MAXSIZE*sizeof(int));
  cq->front=cq->rear=0;
}

/*入队操作*/
int enqueue(cqueue *cq,int e)
{
  if((cq->rear+1)%MAXSIZE==cq->front) return 0;
  cq->base[cq->rear]=e;
  cq->rear=(cq->rear+1)%MAXSIZE;
  return 1;
}

/*出对操作*/
int outqueue(cqueue *cq,int *e)
{
  if(cq->front==cq->rear) return 0;
  *e=cq->base[cq->front];
  cq->front=(cq->front+1)%MAXSIZE;
  return 1;
}

/*输出操作*/
void list(cqueue *cq)
{
  int i;
  i=cq->front;
  while(i!=cq->rear)
  {
    printf("%4d",cq->base[i]);
    i=(i+1)%MAXSIZE;
  }
  printf("\n");
}

main()
{
  fun();
  getch();
}


我输入0的时候它就不停的打印一大堆不知道什么东西的了。

回复列表 (共4个回复)

沙发

/*编写程序,从键盘上输入一个整数序列a1,a2,……,an,若ai>0,则ai进队列;若ai<0,则
对头元素出队列;当ai=0时算法结束。利用循环队列完成*/
#include<stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct
{
  int *base;
  int front;
  int rear;
}cqueue;

/*函数声明*/
void fun(void);
int enqueue(cqueue *cq,int e);    /*函数要对齐啊*/
int outqueue(cqueue *cq);
void initqueue(cqueue *cq);
void list(cqueue *cq);

/*算法*/
void fun(void)
{
  cqueue cq;
  int x;
  int i;
  initqueue(&cq);
  
  
  scanf("%d",&x);
  while(x!=0)
  {
      if(!enqueue(&cq,x))
      printf("The cycle queue is full!\n");
      
      scanf("%d",&x);
  }
  outqueue(&cq);
  list(&cq);
}
/*初始化队列*/
void initqueue(cqueue *cq)
{
  cq->base=(int *)malloc(MAXSIZE*sizeof(int));
  cq->front = cq->rear = 0;
}

/*入队操作*/
int enqueue(cqueue *cq,int e)
{
  if((cq->rear+1)%MAXSIZE==cq->front) return 0;
  cq->base[cq->rear]=e;
  cq->rear=(cq->rear+1)%MAXSIZE;
  return 1;
}

/*出对操作*/
int outqueue(cqueue *cq)
{
  if(cq->front==cq->rear) return 0;
  cq->front=(cq->front+1)%MAXSIZE;
  return 1;
}

/*输出操作*/
void list(cqueue *cq)
{
  int i;
  i=cq->front;
  while(i!=cq->rear)
  {
    printf("%4d",cq->base[i]);
    i++;
  }
  printf("\n");
}

main()
{
  fun();
  getch();
}

我看了老半天怎么没看出来是反向输出的啊
我照自己的想法稍微该了一下,没多少变动,程序是能运行了
比如输入
4
5
6
0
输出
  5   6

板凳

我论坛帖子写错了,是个队列程序,不是反向输出.题目就是第一句!

3 楼

貌似楼主的代码里没有初始化队列...

4 楼

初始化了啊
就是不明白哪里错了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册