AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

240808循环队列的顺序实现、链式实现,双端队列

作者: 作者的头像   Yoture ,  2024-08-08 17:20:54 ,  所有人可见 ,  阅读 8


0


主要代码为顺序实现、链式实现,双端队列需要理解并用于解题。

一、顺序实现

#include <stdio.h>
#define max 10
typedef struct sqqueue{
    int data[max];
    int front,rear;
}sqqueue;
bool initqueue(sqqueue &q){
    q.rear=q.front=0;
}//此步骤初始化;
bool queueempty(sqqueue &q){
    if(q.rear==q.front){
        return true;
    }
    else{
        return false;
    }
}//此步骤判断是否为空
bool enqueue(sqqueue &q,int e){
    if((q.rear+1)%max==q.front){
        return false;
    }
    q.data[q.rear]=e;
    q.rear=(q.rear+1)%max;
    return true;
}//入队操作,可以说队列的精髓之处,就是判满条件,这个条件使队列变成了一个环
bool dequeue(sqqueue &q,&int x){
    if(q.rear==q.front){
        return false;
    }
    x=q.data[q.front];
    q.front++;
    return true;
}//出队操作


//下面是三种判断队满的条件
1、上面的方法,注意下图计算个数
屏幕截图 2024-08-08 162220.png
2、size变量,入队++,出队–
3、tag变量,方法如下图
屏幕截图 2024-08-08 162519.png
4、注意当题目给rear指向当前元素而非下一个时操作不同,并且这种情况下无法判满,必须采用2、3方法

二、链式实现

//带头结点
//需要定义两个结构体
typedef struct linknode{
    int data;
    struct linknode *next;
}linknode;
typedef struct linkqueue{
    linknode *rear,*front;
}linkqueue;
bool initqueue(linkqueue &q){
    q.rear=q.front=(linknode *)malloc(sizeof(linknode));
    q.front->next=NULL;
}//初始化不同,判空操作相同
void enqueue(linkqueue &q,int e){
    linknode *s=(linknode *)malloc(sizeof(linknode));
    s->data=e;
    s->next=NULL;//不带头结点时需要多一步判定表是否为空
    //if(q.front==NULL){q.front=s;q.rear=s}
    //else{q.rear->next=s;q.rear=s;}
    q.rear->next=s;
    q.rear=s;
}//入队
bool dequeue(linkqueue &q,int &e){
    if(queueempty(q)){
        return false;
    }
    linknode *p=q.front->next;//注意第一次没想明白,这里是有头结点的
    //所以q.front指的是头结点,->next指的是要删的结点,同时注意front
    //永远指向头结点。如果不带头结点p=front
    x=p->data;
    q.front->data=p->next;
    if(q.rear==p){
        q.rear=q.front;
    }//最后一个结点时操作,如果不带头结点则应该写q.rear=null;q.front=null
    free(p);
    return true;
}//出队

三、双端队列
考试多填空选择,放几个图以供参考
1、栈的结论(注意栈能实现的顺序,双端队列一定能实现)
屏幕截图 2024-08-08 171812.png
2、输入受限
屏幕截图 2024-08-08 172155.png
3、输出受限
屏幕截图 2024-08-08 172309.png

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息