本人原创,有问题请评论,楼主会随时回来查看修改滴~

觉得有用请点个赞哦~~

1、顺序队

/**
2020.04:queue
顺序结构-循环队列
判空
判满
求长度
入队
出队
获取队头
获取队尾
*/
#include<bits/stdc++.h>
using namespace std;
#define QUEUESIZE 100
typedef int DataType;
typedef struct SeqQueue
{DataType data[QUEUESIZE];int front;int rear;
} SeqQueue;
void initQueue(SeqQueue *q)//初始化queue
{q->front = 0;//前部q->rear = 0;//尾部
}
void clearQueue(SeqQueue *q)//清空queue
{q->front = 0;q->rear = 0;
}
bool queueEmpty(SeqQueue *q)//isEmpty?
{return q->front == q->rear;
}
bool queueFull(SeqQueue *q)//isFull?
{return q->front == (q->rear+1)%QUEUESIZE;
}
DataType getHead(SeqQueue *q)//return Head
{DataType temp;if(queueEmpty(q)){return -1;}temp = q->data[q->front];//返回队头return temp;
}
DataType getTail(SeqQueue *q)//return tail
{DataType temp;if(queueEmpty(q)){return -1;}temp = q->data[q->rear-1];//返回队尾return temp;
}
DataType deQueue(SeqQueue *q)//出队
{DataType temp;if(queueEmpty(q))return -1;temp = q->data[q->front];q->front = (q->front+1) % QUEUESIZE;//形成循环序列,几何上相当于front--return temp;
}
bool enQueue(SeqQueue *q,DataType e)//入队
{if(queueFull(q))return false;q->data[q->rear]=e;q->rear=(q->rear+1)%QUEUESIZE;//形成循环序列,几何上相当于rear++return true;
}
int queueLength(SeqQueue *q)
{return (q->rear - q->front + QUEUESIZE) %QUEUESIZE;//等同于QUEUESIZE-|front-rear|
}
int Random_number()//随机产生0~222整数
{return rand()%222;
}
int main()
{srand(time(NULL));      //根据电脑时间,生成随机种子SeqQueue sq;cout<<"1--程序正在执行队列初始化...."<<endl;initQueue(&sq);cout<<"   初始化成功,正在入队20个随机元素"<<endl;cout<<"   入队顺序:";for(int i = 1; i<21; i++){int temp_num=Random_number();printf("%5d",temp_num);enQueue(&sq,temp_num);if(i%10==0)cout<<endl<<"             ";}cout<<endl<<"   20个元素已成功入队!"<<endl<<endl;cout<<"2--程序正在执行入队....请输入一个正整数元素:";int temp_en;cin>>temp_en;if(enQueue(&sq,temp_en))cout<<"   入队成功!"<<endl<<endl;elsecout<<"   入队失败!"<<endl<<endl;cout<<"3--程序正在判空...."<<endl;if(queueEmpty(&sq))cout<<"   queue is empty"<<endl<<endl;elsecout<<"   queue is not empty"<<endl<<endl;cout<<"4--程序正在判满...."<<endl;if(queueEmpty(&sq))cout<<"   queue is full"<<endl<<endl;elsecout<<"   queue is not full"<<endl<<endl;cout<<"5--程序正在获取长度...."<<endl;cout<<"   获取长度为:"<<queueLength(&sq)<<endl<<endl;cout<<"6--程序正在执行出队...."<<endl;int temp_de=deQueue(&sq);if(temp_de!=-1)cout<<"   出队元素为:"<<temp_de<<endl<<endl;elsecout<<"   入队失败!"<<endl<<endl;cout<<"7--程序正在获取长度...."<<endl;cout<<"   获取长度为:"<<queueLength(&sq)<<endl<<endl;cout<<"8--程序正在获得队头元素...."<<endl;int temp_gh=getHead(&sq);if(temp_gh!=-1)cout<<"   队头元素为:"<<temp_gh<<endl<<endl;elsecout<<"   获取失败!"<<endl<<endl;cout<<"9--程序正在获得队尾元素...."<<endl;int temp_gt=getTail(&sq);if(temp_gt!=-1)cout<<"   队尾元素为:"<<temp_gt<<endl<<endl;elsecout<<"   获取失败!"<<endl<<endl;}

2、链式队

/**
2020.04:queue
链式结构-队列
判空
求长度
入队
出队
获取队头
获取队尾
*/#include<bits/stdc++.h>
using namespace std;typedef int DataType;
typedef struct QNode
{DataType data;struct QNode *next;
} QNode;
typedef struct LinkQueue
{QNode *front,*rear;int count;
} LinkQueue;
bool queueEmpty(LinkQueue *q)   //isEmpty?
{return q->front == NULL;    //队头为空?
}
void clearQueue(LinkQueue *q)   //清空queue
{QNode *p = q->front;while(p)            //p不为空时{QNode *p1 = p;  //定义p1,让其指向p当前指向的结点p=p->next;      //p指向下一个结点free(p1);       //释放掉p1指向的结点}
}
void initQueue(LinkQueue *q)    //初始化queue
{if(queueEmpty(q)==false)    //防止初始化一个已经有结点的队列,产生崩溃clearQueue(q);else{q->front = NULL;q->rear = NULL;q->count = 0;}
}
DataType getHead(LinkQueue *q)  //return Head
{DataType temp;if(queueEmpty(q)){return -1;}temp = q->front->data;return temp;
}
DataType getTail(LinkQueue *q)  //return tail
{DataType temp;if(queueEmpty(q)){return -1;}temp = q->rear->data;   //返回队尾return temp;
}
DataType deQueue(LinkQueue *q)  //出队
{DataType temp;if(queueEmpty(q))return -1;QNode *p = q->front;    //队头元素temp = q->front->data;  //获取数据q->front=q->front->next;//队头后u移free(p);q->count--;             //长度-1return temp;
}
bool enQueue(LinkQueue *q,DataType e)//入队
{QNode *p = new QNode;p->data = e;p->next = NULL;if(queueEmpty(q)){q->front = p;       //令头尾都指向pq->rear = p;}else{q->rear->next=p;    //尾结点指向p,之后p为队尾结点q->rear=p;          //q->rear为flag,为p结点}q->count++;return true;
}
int queueLength(LinkQueue *q)
{return q->count;
}
int Random_number()         //随机产生0~222整数
{return rand()%222;
}
int main()
{srand(time(NULL));      //根据电脑时间,生成随机种子LinkQueue lq;lq.front=NULL;//指向空,防止初始化中,判空时对野指针操作(free(p1);语句处)cout<<"1--程序正在执行队列初始化...."<<endl;initQueue(&lq);cout<<"   初始化成功,正在入队20个随机元素"<<endl;cout<<"   入队顺序:";for(int i = 1; i<21; i++){int temp_num=Random_number();if(i!=20)printf("%5d ->",temp_num);elseprintf("%5d ",temp_num);enQueue(&lq,temp_num);if(i%10==0)cout<<endl<<"             ";}cout<<endl<<"   20个元素已成功入队!"<<endl<<endl;cout<<"2--程序正在执行入队....请输入一个正整数元素:";int temp_en;cin>>temp_en;if(enQueue(&lq,temp_en))cout<<"   入队成功!"<<endl<<endl;elsecout<<"   入队失败!"<<endl<<endl;cout<<"3--程序正在判空...."<<endl;if(queueEmpty(&lq))cout<<"   queue is empty"<<endl<<endl;elsecout<<"   queue is not empty"<<endl<<endl;cout<<"4--程序正在获取长度...."<<endl;cout<<"   获取长度为:"<<queueLength(&lq)<<endl<<endl;cout<<"5--程序正在执行出队...."<<endl;int temp_de=deQueue(&lq);if(temp_de!=-1)cout<<"   出队元素为:"<<temp_de<<endl<<endl;elsecout<<"   入队失败!"<<endl<<endl;cout<<"6--程序正在获取长度...."<<endl;cout<<"   获取长度为:"<<queueLength(&lq)<<endl<<endl;cout<<"7--程序正在获得队头元素...."<<endl;int temp_gh=getHead(&lq);if(temp_gh!=-1)cout<<"   队头元素为:"<<temp_gh<<endl<<endl;elsecout<<"   获取失败!"<<endl<<endl;cout<<"8--程序正在获得队尾元素...."<<endl;int temp_gt=getTail(&lq);if(temp_gt!=-1)cout<<"   队尾元素为:"<<temp_gt<<endl<<endl;elsecout<<"   获取失败!"<<endl<<endl;}

复杂度分析

时间复杂度: (注:单个元素操作)

循环顺序队入队O(1) 循环顺序队出队O(1)

链式队入队O(1) 链式队出队O(1)

获取顶端元素O(1) 判满/空O(1)

空间复杂度:

循环顺序队入队O(1) 循环顺序队出队O(1)

链式队入队O(1) 链式队出队O(1)

获取顶端元素O(1) 判满/空O(1)

队列判空_数据结构与算法——队列的C语言实现相关推荐

  1. 队列判空_三分钟基础:什么是队列?

    作者 |  小鹿 来源 |  小鹿动画学编程 写在前边 像线程池.异步队列.消息队列等有限的资源容器中,往往存储大量的任务事件,这些大量的任务事件需要进行有条理的进行任务分发以及各种情况处理,为了能够 ...

  2. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列详解

    前言 栈和队列是一对好兄弟,前面我们介绍过数据结构与算法-栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去).而队列就好比是一个隧道,后面 ...

  3. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列图文详解

    前言 栈和队列是一对好兄弟,前面我们介绍过数据结构与算法-栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去).而队列就好比是一个隧道,后面 ...

  4. 获取用户列表为空_数据结构和算法(Golang实现)(15)常见数据结构-列表

    列表 一.列表 List 我们又经常听到 列表 List 数据结构,其实这只是更宏观的统称,表示存放数据的队列. 列表 List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序 ...

  5. c++数据结构队列栈尸体_数据结构-栈与队列(二)

    1.设有编号为1,2,3,4 的四辆列车,顺序进入一个栈式结构的站台,如图3.90所示.具体写出这四辆列车开出车站的所有可能的顺序,设栈容量为2. 1234 1243 1324 1342 2134 2 ...

  6. node 获取表单数据 为空_数据结构与算法(python)单向链表篇

    链表 数据表的构建需要预先知道数据的大小来申请连续的存储空间, 而在进行扩充的时候又需要进行数据的搬迁, 使用起来不是很灵活. 链表结构可以充分利用计算机内存空间, 实现灵活的内存动态管理. 简单来说 ...

  7. node 获取表单数据 为空_数据结构与算法(python)单向循环链表

    单向循环链表 单链表的一个变形是单向循环链表, 链表的最后一个节点的next域不再为None, 而是指向链表的头节点. 单向循环链表如图所示: 单向循环链表 同样单向循环链表也是要使用python来对 ...

  8. 假设有搅乱顺序的一群儿童成一个队列_数据结构与算法系列之栈amp;队列(GO)...

    以下完整代码均可从这里获取 栈 栈的基本概念 「后进先出.先进后出就是典型的栈结构」.栈可以理解成一种受了限制的线性表,插入和删除都只能从一端进行 当某个数据集合只涉及在一端插入和删除数据,并且满足后 ...

  9. 数据结构与算法---队列

    数据结构与算法-队列 1. 队列的定义: 队列(Queue )简称队,是一种操作受限制 的线性表 ,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队: 删除元素称为出队 ...

最新文章

  1. Dubbo 负载均衡的实现
  2. [c++]引入了头文件和动态库,为什么找不到函数实现
  3. 存储过程DataGrid分页及注意点
  4. Solr学习总结(一)Solr介绍
  5. java单一登录_java实现单一登录 踢人效果
  6. 零基础学python电子书-资料│最适合大学生零基础学的Python视频+电子书
  7. 逆序对算法c语言,归并排序求逆序对的代码(C语言)
  8. 威纶触摸屏485轮询通讯_威纶触摸屏Modbus TCP\RTU\ASCII通信视频教程
  9. 欧冠抽签程序c语言,欧冠抽签
  10. 数学 三角函数 sin 正弦、cos 余弦、tan 正切、cot 余切、sec 正割、csc 余割 简介
  11. 机器学习算法工程师也会遇到35岁这道坎么?
  12. 《不能承受的生命之轻》
  13. 编程中遇到的优秀网站收藏
  14. 千里马android framework实战开发-binder驱动之oneway导致的transaction failed
  15. 个人面经整理深信服测开
  16. 【SPSS统计分析】运用spss软件进行问卷信度分析(附SPSS19.0简体中文版下载地址)
  17. OpenCV学习笔记-傅里叶变换
  18. python提取内容保存excel_Python操作Excel之数据提取
  19. mysql的cpu使用率突然增高_mysql cpu使用率过高解决方法
  20. box-shadow的属性 各种盒子阴影设置

热门文章

  1. 在数据库SQl中拼串
  2. 编译安装LAMP及分离式LAMP平台构建
  3. 首尾相连的一位数组最大子数组和
  4. iOS OC和Swift混编
  5. 拷贝eclipse 工作空间 workspace 步骤
  6. python 中关于py2exe打包
  7. webService 远程访问不了的问题
  8. Google推出的新服务:Docs Spreadsheets
  9. window.open()函数参数说明
  10. ibm笔记本电脑电池_福建省厦门市集美区电池定制供应多少钱