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天前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
14 2
|
1天前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
16 0
|
1天前
|
C语言
数据结构------栈(Stack)和队列(Queue)
数据结构------栈(Stack)和队列(Queue)
10 0
|
1天前
|
编译器 Linux C语言
第五章 栈与队列
第五章 栈与队列
9 0
|
1天前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
6 0
|
1天前
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
9 0
|
6天前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
81 64
|
15天前
|
算法 安全 测试技术
golang 栈数据结构的实现和应用
本文详细介绍了“栈”这一数据结构的特点,并用Golang实现栈。栈是一种FILO(First In Last Out,即先进后出或后进先出)的数据结构。文章展示了如何用slice和链表来实现栈,并通过golang benchmark测试了二者的性能差异。此外,还提供了几个使用栈结构解决的实际算法问题示例,如有效的括号匹配等。
golang 栈数据结构的实现和应用
|
6天前
|
Go
数据结构之 - 深入了解栈数据结构
数据结构之 - 深入了解栈数据结构
16 5
【数据结构】--- 栈和队列
【数据结构】--- 栈和队列

热门文章

最新文章