当前位置:   article > 正文

C语言循环队列的实现以及相关操作(初始化、清空队列、销毁队列、判空、求长度、取队头元素、入队、出队)_c语言如何清空队列

c语言如何清空队列

C语言循环队列的实现以及相关操作

一、队列的定义

只允许对序列的两端进行操作,允许插入的一端称为队尾,允许删除的一端称为队头

注意:在对队列进行入队出队操作时,有可能会造成假溢出问题,如图(f)
在这里插入图片描述
解决方法有两个:
1.每次出队时,把所有元素往前移动
2.循环队列
但是循环队列无法通过条件Q.front==Q.rear来判断队列是空还是满,如图(b)和图(c)在这里插入图片描述
解决方法:
1.设置一个标志域,来判断队列的状态
2.设置一个长度域,来判断队列的状态
3.少用一个元素空间,一旦Q.front==(Q.rear+1)%Q.maxsize,则认为队满,以下介绍这种解决方法的循环队列

二、循环队列的结构体描述以及其他定义

#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef struct {
    char * elem;
    int head;//队头下标
    int rear;//队尾下标
    int maxsize;//最大容量
}SqQueue;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

三、相关操作

1.初始化
Status InitQueue_Sq(SqQueue *Q,int size){
    Q->elem=(char *)malloc(size*sizeof(char));
    if(Q->elem==NULL)return OVERFLOW;
    Q->maxsize=size;//少用一个元素位置,如果size是6,则只有5个空间可以装元素
    Q->head=Q->rear=0;
    return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
2.销毁
Status DestroyQueue_Sq(SqQueue *Q){
    free(Q->elem);
    Q->elem=NULL;
    Q->head=Q->rear=0;
    return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3.清空
void ClearQueue_Sq(SqQueue *Q){
    Q->head=Q->rear=0;
}
  • 1
  • 2
  • 3
4.判空
Status QueueEmpty_Sq(SqQueue Q){
    if(Q.head==Q.rear){
            printf("队列为空");
    }else{
        printf("队列不为空");
    }
    return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
5.求长度
int QueueLength_Sq(SqQueue Q){
    return (Q.rear-Q.head+Q.maxsize)%Q.maxsize;
}
  • 1
  • 2
  • 3
6.取队头元素,并且赋值给e返回
Status Gethead_Sq(SqQueue Q,char *e){
    if(Q.head==Q.rear)return OVERFLOW;
    *e=Q.elem[Q.head];
    return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
7.入队
Status EnQueue_Sq(SqQueue *Q,char e){
    if((Q->rear+1)%Q->maxsize==Q->head){
        printf("队满!入队失败");
        return OVERFLOW;
    }
    Q->elem[Q->rear]=e;
    Q->rear=(Q->rear+1)%Q->maxsize;
    return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
8.出队
Status DeQueue_Sq(SqQueue *Q,char *e){
    if(Q->head==Q->rear){
        printf("队空!出队失败");
        return OVERFLOW;
    }
    *e=Q->elem[Q->head];
    Q->head=(Q->head+1)%Q->maxsize;
    return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/646352
推荐阅读
相关标签
  

闽ICP备14008679号