数据结构C语言实现—队列操作

  1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef int elemType;
5 /************************************************************************/
6 /* 以下是关于队列链接存储操作的6种算法 */
7 /************************************************************************/
8
9 struct sNode{
10 elemType data; /* 值域 */
11 struct sNode *next; /* 链接指针 */
12 };
13
14 struct queueLK{
15 struct sNode *front; /* 队首指针 */
16 struct sNode *rear; /* 队尾指针 */
17 };
18
19 /* 1.初始化链队 */
20 void initQueue(struct queueLK *hq)
21 {
22 hq->front = hq->rear = NULL; /* 把队首和队尾指针置空 */
23 return;
24 }
25
26 /* 2.向链队中插入一个元素x */
27 void enQueue(struct queueLK *hq, elemType x)
28 {
29 /* 得到一个由newP指针所指向的新结点 */
30 struct sNode *newP;
31 newP = malloc(sizeof(struct sNode));
32 if(newP == NULL){
33 printf("内存空间分配失败! ");
34 exit( 1 );
35 }
36
37 /* 把x的值赋给新结点的值域,把新结点的指针域置空 */
38 newP->data = x;
39 newP->next = NULL;
40
41 /* 若链队为空,则新结点即是队首结点又是队尾结点 */
42 if(hq->rear == NULL){
43 hq->front = hq->rear = newP;
44 }else {
45 /* 若链队非空,则依次修改队尾结点的指针域和队尾指针,使之指向新的队尾结点 */
46 hq->rear = hq->rear->next = newP; /* 注意赋值顺序哦 */
47 }
48 return;
49 }
50
51 /* 3.从队列中删除一个元素 */
52 elemType outQueue(struct queueLK *hq)
53 {
54 struct sNode *p;
55 elemType temp;
56
57 /* 若链队为空则停止运行 */
58 if(hq->front == NULL){
59 printf("队列为空,无法删除! ");
60 exit(1);
61 }
62 temp = hq->front->data; /* 暂存队尾元素以便返回 */
63 p = hq->front; /* 暂存队尾指针以便回收队尾结点 */
64 hq->front = p->next; /* 使队首指针指向下一个结点 */
65
66 /* 若删除后链队为空,则需同时使队尾指针为空 */
67 if (hq->front == NULL){
68 hq->rear = NULL;
69 }
70
71 free(p); /* 回收原队首结点 */
72 return temp; /* 返回被删除的队首元素值 */
73 }
74
75 /* 4.读取队首元素 */
76 elemType peekQueue(struct queueLK *hq)
77 {
78 /* 若链队为空则停止运行 */
79 if(hq->front == NULL){
80 printf("队列为空,无法删除! ");
81 exit(1);
82 }
83
84 return hq->front->data; /* 返回队首元素 */
85 }
86
87 /* 5.检查链队是否为空,若为空则返回1, 否则返回0 */
88 int emptyQueue(struct queueLK *hq)
89 {
90 /* 判断队首或队尾任一个指针是否为空即可 */
91 if(hq->front == NULL){
92 return 1;
93 }else{
94 return 0;
95 }
96 }
97
98 /* 6.清除链队中的任何元素 */
99 void clearQueue(struct queueLK *hq)
100 {
101 struct sNode *p = hq->front; /* 队首指针赋给p */
102 /* 依次删除队列中的每一个结点,最后使队首指针为空 */
103 while(p != NULL){
104 hq->front = hq->front->next;
105 free(p);
106 p = hq->front;
107 } /* 循环结束后队首指针已为空 */
108
109 hq->rear = NULL; /* 置队尾指针为空 */
110 return;
111 }
112
113 /************************************************************************/
114
115 int main(int argc, char* argv[])
116 {
117 struct queueLK q;
118 int a[8] = {3, 8, 5, 17, 9, 30, 15, 22};
119 int i;
120
121 initQueue(&q);
122 for(i = 0; i < 8; i ){
123 enQueue(&q, a[i]);
124 }
125 printf("%d ", outQueue(&q));
126 printf("%d ", outQueue(&q));
127
128 enQueue(&q, 68);
129 printf("%d ", peekQueue(&q));
130 printf("%d ", outQueue(&q));
131
132 while(!emptyQueue(&q)){
133 printf("%d ", outQueue(&q));
134 }
135
136 printf("");
137 clearQueue( &q);
138 system("pause");
139
140 return 0;
141 }

  


转载于:https://www.cnblogs.com/smalltigerlee/archive/2011/10/26/2224944.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高校人工智能热的“冷”思考

来源&#xff1a;中国科学报高校在开设相关专业时&#xff0c;应该组织教授委员会、学术委员会&#xff0c;结合国家的人才政策、产业发展对人才的需求、国内外其他高校同类专业人才培养的情况&#xff0c;就本校开设这方面的专业有无现实条件&#xff0c;怎样进行师资建设、课…

转载:实用 FRIDA 进阶 --- objection :内存漫游、hook anywhere、抓包

转载&#xff1a;实用FRIDA进阶&#xff1a;内存漫游、hook anywhere、抓包&#xff1a;https://www.anquanke.com/post/id/197657 Frida Hook Android 常用方法&#xff1a;https://blog.csdn.net/zhy025907/article/details/89512096 实用FRIDA进阶&#xff1a;脱壳、自动化…

谷歌李飞飞:我们依旧站在人工智能研究的起点

来源&#xff1a;机器人大讲堂摘要&#xff1a;8 年来&#xff0c;在 ImageNet 数据集的训练下&#xff0c;人工智能对于图像识别的准确度整整提高了 10 倍&#xff0c;甚至超越了人类视觉本身。但李飞飞认为&#xff0c;我们对于人工智能的研究仍在起点上。说起人工智能&#…

Android Intent 用法总结

From&#xff1a;https://www.jianshu.com/p/67d99a82509b Android 中提供了 Intent 机制来协助应用间的交互与通讯&#xff0c;Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述&#xff0c;Android 则根据此 Intent 的描述&#xff0c;负责找到对应的组件…

teamlab与redmine试用对比报告

系统介绍 l TeamLab 是一个免费开源的商业协作和项目管理的平台。TeamLab 主要功能包括&#xff1a;项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等等。 l Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及…

FRIDA - API使用篇:rpc、Process、Module、Memory 使用方法及示例

官方 API (JavaScript API)&#xff1a;https://frida.re/docs/javascript-api/ From&#xff1a; ( FRIDA-API使用篇 )&#xff1a;https://www.anquanke.com/post/id/195215 前言 在这篇文章中来对其官方的一些非常常用的 API 进行学习。所谓工欲善其事&#xff0c;必先利其…

Entity Framework 实体关系总结(转)

通过 Entiy Framework实践系列文章&#xff0c;理了理 Entity Framework 的实体关系。 为什么要写文章来理清这些关系&#xff1f;“血”的教训啊&#xff0c;刚开始使用 Entity Framework 的时候&#xff0c;由于没有静下心来认真理清关系&#xff0c;走了一些"痛不欲生&…

技术架构分析:攻克Dota2的OpenAI-Five

来源&#xff1a;CreateAMind摘要&#xff1a;OpenAI昨日发布研究成果&#xff0c;宣布Dota2 5v5在限定条件下&#xff08;英雄阵容固定&#xff0c;部分道具和功能禁用&#xff09;战胜人类半职业选手。本文主要对其模型技术架构做一些分析总结。一、 模型输入与输出模型的输入…

Redis基础-Redis概念及常见命令

1.nosql数据库 NoSQL数据库是一种提供了非关系型数据存储的数据库系统&#xff0c;与传统的关系型数据库&#xff08;如SQL数据库&#xff09;不同。NoSQL数据库的特点是灵活性高&#xff0c;能够处理结构化、半结构化或非结构化数据。它们通常用于大数据和实时Web应用。NoSQL数…

Java 高级特性 --- 反射

From&#xff1a;Java 高级特性 --- 反射&#xff1a;https://www.jianshu.com/p/9be58ee20dee From&#xff1a;Java 基础之 --- 反射&#xff08;非常重要&#xff09;&#xff1a;https://blog.csdn.net/sinat_38259539/article/details/71799078 From&#xff1a;Java 高级…

G20国家科技竞争力大盘点,中国科研创新表现突出,人工智能变道超车

来源&#xff1a;科睿唯安中国科学院文献情报中心和科睿唯安6月25日在北京联合发布了《G20国家科技竞争格局之辩》系列报告&#xff0c;报告分为总体篇及人工智能专题篇&#xff08;下文有重点介绍&#xff09;&#xff0c;聚焦G20国家的科研产出规模、学术影响力、领域分布、国…

为什么要用非关系数据库?

随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;非关系数据库产品的发展非常迅速。而传统的关系数据库在应付 web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心&#xff0c;暴露了…

Java中泛型 Class<T>、T与Class<?>、 Object类和Class类、 object.getClass() 和 Object.class

From&#xff1a;Java中泛型 Class<T>、T 与 Class<?>、 Object类 和 Class类、 object.getClass() 和 Object.class &#xff1a;https://www.cnblogs.com/zhaoyanhaoBlog/p/9362267.html Class<T>和 Class<?>类型 有什么区别&#xff1a;https://…

智能驾驶是否会“运动式”发展

来源&#xff1a;中国科学网最近&#xff0c;无人驾驶车发生撞人致死事故再度引发公众恐慌。在近日举行的全球人工智能技术大会上&#xff0c;中国工程院院士李德毅表示&#xff0c;不管是无人驾驶还是有人驾驶&#xff0c;事故总是有的。实际上人类才是第一马路杀手&#xff0…

Java学习之java高级特性

From&#xff1a;https://blog.csdn.net/w252064/article/details/79923999 [Java高级特性详解]&#xff1a;https://blog.csdn.net/qq_37977176/article/details/78941649 菜鸟教程 之 Java 教程&#xff1a;https://www.runoob.com/java/java-tutorial.html 本部分内容主要…

任正非亲自指导下拍的视频,事关中国的未来

来源&#xff1a;华为中美贸易战开打之后&#xff0c;中国产业未来的出路在哪里&#xff1f;华为的答案是基础研究与基础教育。这则由华为创始人兼CEO任正非亲自指导下拍摄的视频&#xff0c;呼吁社会重视基础教育&#xff0c;让教师成为最伟大的职业&#xff0c;成为优秀青年的…

获得SD卡的剩余容量

File pathFile Environment.getExternalStorageDirectory();StatFs statfs new StatFs(pathFile.getPath());//获得可供程序使用的Block数量long nAvailaBlock statfs.getAvailableBlocks();//获得SDCard上每个block的SIZElong nBlocSize statfs.getBlockSize();//计算SDCa…

Python 中 with 用法详解

浅谈 Python 的 with 语句&#xff1a;https://developer.ibm.com/zh/articles/os-cn-pythonwith/ python3&#xff0c;浅谈with的神奇魔法&#xff1a;https://blog.csdn.net/lxy210781/article/details/81176687 Python 的 with 语句详解&#xff1a;https://www.jb51.net/…

《科学》杂志做了一个清单,告诉你今年 10 个最重要的科技突破

来源&#xff1a;网络大数据摘要&#xff1a;著名杂志《科学》最近列出了一份清单&#xff0c;来告诉你哪些科技突破在 2015 年是最重要的。《科学》是美国科技促进会出版的一份学术期刊杂志&#xff0c;主要发布的内容是各种学术研究&#xff0c;以及相关的科学新闻和观点&…

【php数组函数序列】之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值...

prev() 定义和用法 prev() 函数把指向当前元素的指针移动到上一个元素的位置&#xff0c;并返回该元素值。 如果内部指针已经超过数组的第一个元素之前&#xff0c;函数返回 false。 语法 prev(array) 参数描述array必需。规定要使用的数组。说明 prev() 和 next() 的行为类似&…