顺序队列的基本运算

顺序队列的定义

  1. #include <stdio.h>
  2. #define QueueSize 100
  3. typedef char ElemType;
  4. typedef struct
  5. {
  6. ElemType data[QueueSize]; /*保存队中元素*/
  7. int front,rear; /*队头和队尾指针*/
  8. } SqQueue;

初始化队列

  1. void InitQueue(SqQueue &qu) /*qu为引用型参数*/
  2. {
  3. qu.rear=qu.front=0; /*指针初始化*/
  4. }

入队运算

  1. int EnQueue(SqQueue &qu,ElemType x) /*入队运算,qu为引用型参数*/
  2. {
  3. if ((qu.rear+1)%QueueSize==qu.front) /*队满*/
  4. return 0;
  5. qu.rear=(qu.rear+1)%QueueSize; /*队尾指针进1*/
  6. qu.data[qu.rear]=x;
  7. return 1;
  8. }

出队运算

  1. int DeQueue(SqQueue &qu,ElemType &x) /*出队运算,qu和x为引用型参数*/
  2. {
  3. if (qu.rear==qu.front)
  4. return 0;
  5. qu.front=(qu.front+1)%QueueSize; /*队头指针进1*/
  6. x=qu.data[qu.front];
  7. return 1;
  8. }

取队头元素运算

  1. int GetHead(SqQueue qu,ElemType &x) /*取队头元素运算,x为引用型参数*/
  2. {
  3. if (qu.rear==qu.front) /*队空*/
  4. return 0;
  5. x=qu.data[(qu.front+1)%QueueSize];
  6. return 1;
  7. }

判断队空运算

  1. int QueueEmpty(SqQueue qu) /*判断队空运算*/
  2. {
  3. if (qu.rear==qu.front) /*队空*/
  4. return 1;
  5. else
  6. return 0;
  7. }

main

  1. void main()
  2. {
  3. SqQueue qu;
  4. ElemType e;
  5. InitQueue(qu);
  6. printf("队%s\n",(QueueEmpty(qu)==1?"空":"不空"));
  7. printf("a进队\n");EnQueue(qu,'a');
  8. printf("b进队\n");EnQueue(qu,'b');
  9. printf("c进队\n");EnQueue(qu,'c');
  10. printf("d进队\n");EnQueue(qu,'d');
  11. printf("队%s\n",(QueueEmpty(qu)==1?"空":"不空"));
  12. GetHead(qu,e);
  13. printf("队头元素:%c\n",e);
  14. printf("出队次序:");
  15. while (!QueueEmpty(qu))
  16. {
  17. DeQueue(qu,e);
  18. printf("%c ",e);
  19. }
  20. printf("\n");
  21. }