数据结构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 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
随机推荐
- Java_判断文件是否写入完成
/** * 等待文件(非目录)读写完毕,费时的操作,不要放在主线程 * * @param file 文件 */ private void waitForWirtenCompleted(File fil ...
- Spring开始
Spring 主要作用:spring的主要作用是解耦,降低代码间的耦合度(指降低类和类之间的耦合度).根据功能的不同,可以将系统中的代码分成主业务逻辑和系统级业务逻辑两类.Spring根据代码功能的特 ...
- C语言典型编程3
关于C的一些小而精的编程,适合希望提升编程能力的初学者学习:关键编程也就几句,但思维可以迁移到其他编程语言.同一问题,算法多种. //判断三角形类型#include<stdio.h>mai ...
- VS2019正式版注册码秘钥
Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 ProfessionalNYWVH-HT4X ...
- 101210-450789-147200(可以激活Xshell5,而且可以升级) 亲测可用 只能用于xshell5
101210-450789-147200(可以激活Xshell5,而且可以升级) 亲测可用 只能用于xshell5
- AD域 组策略部署U软件
1.首先把需要部署的软件放到活动目录共享文件夹中.(只支持MSI格式的软件) 2.打开组策略管理工具. 3.选择域名右键,创建GPO. 4.在弹出的新建GPO窗口中,输入策略名称. 5.在新创建的策略 ...
- Ubuntu16.04 藍牙連上,但是聲音裏面找不到設備
解決辦法: 1. sudo apt-get install blueman bluez* 2. sudo vim /etc/pulse/default.pa 注釋掉下面的代碼: #.ifexists ...
- 后台商品搜索功能开发SQL
在做后台的商品搜索功能开发时遇到了一些问题记录下来 版本一 <select id="SelectByNameAndParentId resultMap="Base_resul ...
- appium 测试过程中遇到的几个问题 ---持续更新!
一. appium自带的Chromedriver版本和设备Android System Webview版本不一致的问题 报错信息: io.appium.java_client.NoSuchContex ...
- python学习中遇到的错误及解决办法
1. nodename nor servname provided 原因:Python程序中有段程序调用 socket.gethostbyname(socket.gethostname()) sock ...