数据结构C语言版-队列
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
typedef int QElemType;
typedef struct QNode {
QElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} LinkQueue;
bool InitQueue(LinkQueue &Q);
bool DestoryQueue(LinkQueue &Q);
bool ClearQueue(LinkQueue &Q);
bool QueueEmpty(LinkQueue Q);
int QueueLength(LinkQueue Q);
int GetHead(LinkQueue Q);
bool EnQueue(LinkQueue &Q, QElemType e);
bool DeQueue(LinkQueue &Q, QElemType &e);
void QueueTraverse(LinkQueue Q);
//Q.front里面是没有数据的
//Q.rear里面是有数据的
int main() {
LinkQueue s;
InitQueue(s);
EnQueue(s, 5);
EnQueue(s, 6);
EnQueue(s, 7);
ClearQueue(s);
EnQueue(s, 8);
EnQueue(s, 100);
cout << QueueLength(s) << endl;
int a;
DeQueue(s, a);
cout << a << endl;
if (QueueEmpty(s)) {
cout << 'a' << endl;
}
cout << GetHead(s) << endl;
}
void QueueTraverse(LinkQueue Q) {
if (Q.front == Q.rear) {
return;
}
QueuePtr tmp = Q.front->next;
while (tmp != Q.rear) {
printf("%d ", tmp->data);
tmp = tmp->next;
}
printf("%d\n", tmp->data);
}
int GetHead(LinkQueue Q) {
return Q.front->next->data;
}
bool QueueEmpty(LinkQueue Q) {
if (Q.front == Q.rear) {
return true;
}
return false;
}
int QueueLength(LinkQueue Q) {
int length = 0;
LinkQueue tmp = Q;
while (tmp.front) {
length++;
tmp.front = tmp.front->next;
}
return length - 1;
}
bool InitQueue(LinkQueue &Q) {
Q.front = Q.rear = (QNode *) malloc(sizeof(QNode));
if (!Q.front) {
exit(EOVERFLOW);
}
Q.front->next = NULL;
return true;
}
bool ClearQueue(LinkQueue &Q) {
QueuePtr tmp = Q.front->next;
while (tmp) {
QueuePtr tp = tmp;
tmp = tmp->next;
free(tp);
}
Q.rear = Q.front;
Q.front->next = NULL;
}
bool DestoryQueue(LinkQueue &Q) {
while (Q.front) {
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
return true;
}
bool EnQueue(LinkQueue &Q, QElemType e) {
QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
if (!p) {
exit(EOVERFLOW);
}
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return true;
}
bool DeQueue(LinkQueue &Q, QElemType &e) {
if (Q.front == Q.rear) {
return false;
}
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p) {
Q.rear = Q.front;
}
free(p);
return true;
}
数据结构C语言版-队列的更多相关文章
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- 【数据结构(C语言版)系列三】 队列
队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...
- 深入浅出数据结构C语言版(7)——特殊的表:队列与栈
从深入浅出数据结构(4)到(6),我们分别讨论了什么是表.什么是链表.为什么用链表以及如何用数组模拟链表(游标数组),而现在,我们要进入到对线性表(特意加了"线性"二字是因为存在多 ...
- 【数据结构(C语言版)系列二】 栈
栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...
- 深入浅出数据结构C语言版(5)——链表的操作
上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
随机推荐
- WordCount编码实现及单元测试(第二次作业)
项目码云地址:https://gitee.com/zhujunlin/wc.git 一.题目思路 ========== 阅读完题目要求之后我很懵,因为之前从未使用过博客园和码云工具,对编程的目标需求也 ...
- Taro开发之城市选择器(带坐标)
要写个城市选择器能返回对应的城市(这里只定义到了地级市),同时返回坐标系,参考了网上资料,下面就看看具体代码吧 import Taro, { Component } from '@tarojs/tar ...
- webpack打包优化
https://www.cnblogs.com/vvjiang/p/9327903.html
- python--第十六天总结(bootstrap)
一. 实现原理 网格布局是通过容器的大小,平均分为12份(可以修改),再调整内外边距,和表格布局有点类似但是也存在区别. 实现步骤如下: (1) 数据行.row 必须包含在容器.container 中 ...
- mysql-----04 多表查询
本节主要介绍mysql的多表查询(多表连接查询.复合条件查询.子查询) 一.多表连接查询 #重点:外链接语法 select 字段列表 from 表1 inner|left|right join 表2 ...
- sql yog出现2013错误
首先用telnet检查一下你的防火墙端口,如果连接失败,配置防火墙. 配置防火墙,开启3306端口 find -name iptables vim /etc/sysconfig/iptables -A ...
- vue的搭建项目
请求的封装,先在src下面创建一个utils的文件夹,文件夹里面有ajax.js loading.js index.js to 1 请求的封装 ajax文件 需要引入的文件在后面 /* * [page ...
- tmux复制模式
复制模式支持滚屏等操作,进入方法为Ctrl + b再按"[",此时进入所谓的copy-mode 然后就可以用上下键或PageDn/PageUp浏览屏幕了. 想退出copy-mode ...
- [树上倍增+二分答案][NOIP2012]运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 公元 2044 年,人类进入了宇宙纪元 L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间,这 n-1n− ...
- 如何在OneNote for Mac 中插入文件附件?
OneNote 2016 Mac是一款非常方便的云笔记软件,可以随时记录您稍纵即逝的创意,灵感和发现,发挥您的潜能,简化你的生活和工作.有用户反应如何在OneNote for Mac 中插入文件附件呢 ...