在编程语言中怎样定义队列及其使用(C++)

2020-01-06 20:18:04王振洲

在QueueCycyleControl.c中实现此方法


#include "QueueCycleControl.h"
SECYCLEQUEUE inCycleQueue(SECYCLEQUEUE Q,CDT x){

  //1.判断循环队列是否已经满了,MOD(队尾指针+1,m)=队头指针
  if((Q.rear+1)%CM==Q.front){
    printf("queue is full!n");
  }else{
    //2.在队尾插入,计算队尾指针的
    Q.rear=(Q.rear+1)%CM;
    //3.设置插入结点的值数值
    Q.data[Q.rear]=x;
    printf("in Cycle queue Success!n");
  }
  return Q;
}

(3)删除

在QueueCycyleControl.h写出方法声明


#include "QueueCycleCs.c"
/*
 循环队列删除
 */
SECYCLEQUEUE outCycleQueue(SECYCLEQUEUE Q);
/*
 打印循环队列
 */
void printCycleQueue(SECYCLEQUEUE Q);

在QueueCycyleControl.c中实现此方法


#include "QueueCycleControl.h"
SECYCLEQUEUE outCycleQueue(SECYCLEQUEUE Q){

  //1.判断循环队列是否是空
  if(Q.front==Q.rear){
    printf("Cycle queue is Empty!n");
  }else{
    //2.删除结点从队头删除,计算队头指针:队头指针=MOD(队头指针+1,m)
    Q.front=(Q.front+1)%CM;
    printf("out cycle queue success!n");
  }
  return Q;
}

/*
 打印循环队列
 */
void printCycleQueue(SECYCLEQUEUE Q){
  //M=5;
  //1.从队头开始打印数据
  SECYCLEQUEUE temp=Q;
  printf("queue={");
  //2.判断的条件是,队头指针!=队尾指针
  while (temp.front!=temp.rear) {
    temp.front=(temp.front+1)%CM;
    if(temp.front==((Q.front+1)%CM)){
      printf("%c",temp.data[temp.front]);
    }else{
      printf(",%c",temp.data[temp.front]);
    }

  }
  printf("}n");
}

在main.c中的main方法(int main(int argc, const char * argv[]) {})调用此方法,并且进行判断


#include "QueueCycleControl.h"
int main(int argc, const char * argv[]) {
  //创建循环队列
  SECYCLEQUEUE CQ=initCycleQueue();
  //插入数据5个结点,但是最大是5,一个空闲,最后一个添加不进去,
  CQ=inCycleQueue(CQ, 'a');
  CQ=inCycleQueue(CQ, 'b');
  CQ=inCycleQueue(CQ, 'c');
  CQ=inCycleQueue(CQ, 'd');
  CQ=inCycleQueue(CQ, 'e');
  printCycleQueue(CQ);
  //删除节点-三个结点
  CQ=outCycleQueue(CQ);
  CQ=outCycleQueue(CQ);
  CQ=outCycleQueue(CQ);
  printCycleQueue(CQ);
  //插入-两个结点
  CQ=inCycleQueue(CQ, 'e');
  CQ=inCycleQueue(CQ, 'f');
  printCycleQueue(CQ);
  //删除节点--删除四个结点,现在此时是三个结点,最后一个删除不了
  CQ=outCycleQueue(CQ);
  CQ=outCycleQueue(CQ);
  CQ=outCycleQueue(CQ);
  CQ=outCycleQueue(CQ);
  printCycleQueue(CQ);

  return 0;
}