循环队列的基本操作

采用顺序存储队列

define TRUE 1
define FALSE 0
define OK 1
define ERROR 0
define OVERFLOW -1
typedef int Status; 


类型定义
typedef struct {
     ElemType *elem; //存储空间的基址
     int front; //队头位标
     int rear;  //队尾位标,指示队尾元素的下一位置
     int maxSize; //最大长度
}

//初始化操作
Status InitQueue_Sq(SqQueue &Q, int size) {
   Q.elem = (ElemType*)malloc(size*sizeof(ElemType));
   if(NULL == Q,elem) 
         return OVERFLOW;
   Q.maxSize = size;
   Q.front = Q.rear = 0; //置Q为空队列
   return OK;      
}

//出队操作
Status DeQueue_Sq(SqQueue &Q, ElemType &e) {
//若队列不为空,则删除队列Q中的头元素,用e返回其值
   if(Q.front == Q.rear)
        return ERROR;
   e = Q.elem[Q.front];
   Q.front = (Q.front + 1) % Q.maxSize;
   return OK;
)

//入队操作
Status EnQueue_Sq(SqQueue &Q, ElemType e) {
//若当前队列不满,在队尾元素之后,插入元素e为新的队尾元素
   if((Q.rear + 1) % Q.maxSize = Q.front)
          return ERROR;
   Q.elem[Q.rear] = e;
   Q.rear = (Q.rear + 1) % Q.maxSize;
   return OK;        
}

//求队列长度
int QueueLength_Sq(SqQueue Q) {
  int s;     
  s = Q.rear - Q.front;  
  if(s<0)  s = Q.maxSize - Q.front + Q.rear;   
  return s;  
}

//队列判空
Status QueueEmpty_Sq(SqQueue Q) {
//队列为空时,返回TRUE,否则返回FALSE
   if(Q.front == Q.rear)
        return TRUE;
    return FALSE;
}

//取队头元素
Status GetHead_Sq(SqQueue Q, ElemType &e) {
//若队列不空,则用e返回Q的队列头元素,返回OK;否则返回ERROR
    if (!QueueEmpty_Sq(Q))
       {
              e = Q.elem[Q.front];
              return OK;
       }
    return ERROR;
}

//清空队列
void ClearQueue_Sq(SqQueue &Q) {
//将Q置为空
    Q.front = Q.rear = 0;
}

//销毁队列
Status DestroyQueue_Sq(SqQueue &Q) {
//销毁队列没,释放结点
   if (Q.elem != NULL)
       {
              free(Q.elem);
              Q.elem = NULL;
              Q.front = Q.rear = 0;
       }
}

//遍历队列
void TraverseQueue(SqQueue Q)
{
       if (!QueueEmpty_Sq(Q))
       {
              int i = Q.front;
              while (i != Q.rear)
              {
                     printf("%d ", Q.elem[i]);
                     i = (i+1) % maxSize;
              }
              printf("\n");
       }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值