注册 登录
编程论坛 数据结构与算法

循环队列,删除队头元素时出错

守望之殇 发布于 2011-04-09 11:08, 607 次点击
程序代码:

#include"stdio.h"
#define QueueSize 50
/*这是用到的基本函数*/
typedef int ElemType;
typedef struct
{
  ElemType *elem;
  int front;
  int rear;
}SeqQueue;

void InitQueue(SeqQueue *Q)
{
  Q->elem=(ElemType *)malloc(sizeof(ElemType)*QueueSize);
  if(Q->elem==NULL)
    exit(1);
  Q->front=Q->rear=0;
}

int Empty(SeqQueue Q)
{
  if(Q.front==Q.rear)
    return 1;
}

int Full(SeqQueue Q)
{
  if(Q.front==(Q.rear+1)%QueueSize)
    return 1;
}

void InsertElem(SeqQueue *Q,ElemType x)
{
  if(Full(*Q)==1)
    printf("The Queue is FULL!\n");
  else
    {
      Q->elem[Q->rear]=x;
      Q->rear=(Q->rear+1)%QueueSize;
    }
}

void DeElem(SeqQueue *Q,ElemType *x)
{
  if(Empty(*Q)==1)
    printf("The Queue is EMPTY!\n");
  else
    {
      *x=Q->elem[Q->front];
      Q->front=(Q->front+1)%QueueSize;
    }
}

void Print(SeqQueue Q)
{
  if(Empty(Q)==1)
    printf("The Queue is EMPTY!\n");
  else
    {
      int i,t=0;
      for(i=Q.front;t<Length(Q);t++,i=(i+1)%QueueSize)
        printf("%d,",Q.elem[i]);
    }
}
2 回复
#2
守望之殇2011-04-09 11:10
程序代码:

#include"basic.h"
/*这是主函数*/
main()
{
  SeqQueue *Qa;
  ElemType x;
  int i=1;
  Qa=(SeqQueue *)malloc(sizeof(SeqQueue));
  if(Qa==NULL)
    exit(1);
  InitQueue(Qa);
  printf("Input elem%d:",i++);
  scanf("%d",&x);
  while(x!=0)
    {
      InsertElem(Qa,x);
      printf("Input elem%d:",i++);
      scanf("%d",&x);
    }
  printf("The Queue is:");
  Print(*Qa);

  printf("\nDelete Front,");
  DeElem(Qa,&x);
  Print(*Qa);
  getch();
}
#3
守望之殇2011-04-09 11:13
int Empty(SeqQueue Q)
{
  if(Q.front==Q.rear)
    return 1;
}

当我把这段改为时,就可以运行成功,但是一直弄不明白是不是这里出错还是一种巧合?
程序代码:

int Empty(SeqQueue Q)
{
  if(Q.front==Q.rear)
    return 1;
  return -1;
}
[/quote]
1