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;
}


目录
相关文章
|
2天前
初步认识栈和队列
初步认识栈和队列
20 10
|
2天前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
3天前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
15 2
|
1天前
探索数据结构:队列的的实现与应用
探索数据结构:队列的的实现与应用
|
1天前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
5 0
|
3天前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
18 0
|
3天前
|
C语言
数据结构------栈(Stack)和队列(Queue)
数据结构------栈(Stack)和队列(Queue)
12 0
|
4天前
|
编译器 Linux C语言
第五章 栈与队列
第五章 栈与队列
12 0
|
4天前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
11 0
|
9天前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
82 64