03(数据结构考研)队列相关操作代码

简介: 03(数据结构考研)队列相关操作代码

❤️队列的顺序实现❤️

#include <stdio.h>
#define MAXSIZE 10//队列元素的最大个数
//顺序队列的描述
typedef struct {
    ElemType data[MAXSIZE];//静态数组存放队列元素
    int front,rear;//队头指针,队尾指针
}sqQueue;
//初始化一个队列
void InitQueue(sqQueue &Q){
    Q.rear=Q.front=0;//初始化时,队尾指针指向队头指针
}
//判断队列是否为空
bool QueueEmpty(sqQueue &Q){
    if(Q.rear==Q.front)//对空条件
        return true;
    else
        return FALSE;
}
int main()
{
    //声明一个队列
    sqQueue Q;
    //初始化一个队列
    InitQueue(Q);
    //判断队列是否为空
    QueueEmpty(Q);
    return 0;
}

❤️循环队列的入队操作❤️

  • 顺序队列在队列满的情况下容易发生假溢出的情况,所以引入了循环队列
  • 顺序队列满的条件无法代码表示,所以我们引入了模运算的方式进行的表示。
  • 队列满:(Q.rear+1)%MAXSIZE==Q.front
  • 顺序队列–>(抽象成)循环队列:Q.rear=(Q.rear+1)%MAXSIZE,这里采用的是队尾指针加1取模,使得顺序队列的存储空间在逻辑上变成了“环状”,也就形成了循环队列
    这里需要解释一下,这是取余操作的神奇之处,奇妙之处。设定总事件为5,分别为0,1,2,3,4。这5个小事件分别对5取余操作,最后得到的结果只会在0,1,2,3,4之间进行循环,利用取余循环的特征,我们可以使得原本的顺序队列在存储空间逻辑上变成循环的环状。

#include <stdio.h>
typedef struct {
    ElemType data[MAXSIZE];//静态数组存放队列元素
    int front,rear;//队头指针,队尾指针
}sqQueue;
//入队操作
bool EnQueue(sqQueue &Q,ElemType e){
    if((Q.rear+1)%MAXSIZE==Q.front)
        return FALSE;//队满则报错
    Q.data[Q.rear]=x;//新元素插入队尾
    Q.rear=(Q.rear+1)%MAXSIZE;//队尾指针加1
    return true;
}
int main()
{
    //声明一个队列
    sqQueue Q;
    //初始化一个队列
    InitQueue(Q);
    //判断队列是否为空
    QueueEmpty(Q);
    //入队操作
    EnQueue(Q,x);
    return 0;
}

❤️循环队列的出队操作❤️

#include <stdio.h>
typedef struct {
    ElemType data[MAXSIZE];//静态数组存放队列元素
    int front,rear;//队头指针,队尾指针
}sqQueue;
//出队操作
bool DeQueue(sqQueue &Q,ElemType &x){
    if(Q.rear==Q.front)
        return FALSE;
    x=Q.data[Q.front];
    Q.front=(Q.front+1)%MAXSIZE;//把这个删了就可以获得队头元素
    return true;
}
//
int main()
{
    //声明一个队列
    sqQueue Q;
    //初始化一个队列
    InitQueue(Q);
    //判断队列是否为空
    QueueEmpty(Q);
    //入队操作
    EnQueue(Q,x);
    //出队操作
    DeQueue(Q,x);
    return 0;
}

❤️队列的链式实现❤️

#include <stdio.h>
#include <cstdlib>
//队列的链式存储类型
typedef struct {//链式队列的结点
    ElemType data;
    struct LinkNode *next;
}LinkNode;
typedef struct {//链式队列
    LinkNode *front,*rear;//队列的头指针和尾指针
}LinkQueue;
//=====================队列的基本操作============================
//队列的初始化
void InitQueue(LinkQueue &Q){
    Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));//建立头结点   
    Q.front->next=null;//初始化为空
}
//判断队空
bool IsEmpty(LinkQueue Q){
    if(Q.rear==Q.front)//队列为空的条件
        return true;
    else
        return false;
}
//入队操作
void EnQueue(LinkQueue &Q,ElemType x){
    LinkNode  *s=(LinkNode *)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=null;//创建新节点,把数据插入到链尾
    Q.rear->next=s;
    Q.rear=s;
}
//出队操作
bool DeQueue(LinkQueue &Q,ElemType &x){
    if(Q.rear==Q.front)
        return false;//空队操作
    LinkNode *p=Q.front->next;
    x=p->data;
    Q.front->next=p->next;
    if(Q.rear==p)
        Q.rear=Q.front;
    free(p);
    return true;
}
int main() {
    return 0;
}


目录
相关文章
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
166 9
|
19天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
42 5
|
18天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
47 1
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明

热门文章

最新文章