数据结构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
数据结构C语言实现—队列操作相关推荐
- c语言编程队列题,数据结构C语言编程 队列.doc
数据结构C语言编程 队列 #include #include #define MAXQSIZE 10 typedef struct { int *base; //存储空间的起始地址,即数组的首地址,即 ...
- 三星手机电池循环清零代码_数据结构(C语言)-循环队列基本操作
队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构. 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列 ...
- 数据结构c语言循环队列代码,数据结构C语言实现----循环队列
代码如下: #include #include typedef char ElemType; #define MAXQUEUE 100 typedef struct { ElemType *base; ...
- c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)
数据结构(C语言版)例题(第三章:栈和队列) 数据结构(C语言版)例题(第三章:栈和队列) (2008-05-09 12:33:13) 转载▼ ◆3.15③ 假设以顺序存储结构实现一个双向栈,即在一维 ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- 数据结构(C语言第二版)严蔚敏编,数据结构电子教材,线性表,栈,队列,顺序存储结构,初始化,入栈,出栈,入队,出队,c++
前言 提示:本篇文章收录严蔚敏编写的数据结构C语言版本 简单介绍一下顺序表,顺序栈,循环队列,的顺序存储结构之间的区别 代码参考严蔚敏编写的<数据结构>,二维码动态演示可扫码可观看. - ...
- 【数据结构 C语言版】第六篇 栈、队列经典必刷面试考研题
[数据结构 C语言版]第六篇 栈.队列经典必刷面试考研题 写在前面 更新情况记录: 最近更新时间 更新次数 2022/10/20 1 参考博客与书籍以及链接: (非常感谢这些博主们的文章,将我的一些疑 ...
- 【数据结构 C语言版】第五篇 队列(看完刷题无敌)
[数据结构 C语言版]第五篇 队列(看完刷题无敌) 写在前面 更新情况记录: 最近更新时间 更新次数 2022/10/19 1 参考博客与书籍以及链接: (非常感谢这些博主们的文章,将我的一些疑问得到 ...
- 数据结构——栈与队列操作(用栈模拟队列)
[栈与队列操作] 问题描述:假设有两个长度相同的栈 S1,S2,已知以下入栈.出栈.判栈满和判栈空操作: void Push(S,x); Elemtype Pop(S); bool StackFull ...
最新文章
- Mac环境下svn的使用
- 使用命令行加载 jMeter 自定义配置文件里的自定义 property
- linux下gdb常用的调试命令
- 财付通 android api,财付通API接口文档.doc
- substance design graph 不显示_每天1分钟背单词 词根 graph
- 【特色团队采访】实力队伍鱼遇雨欲语与余比赛经验分享
- SpringBoot系列: 所有配置属性和官方文档
- J2SE基础夯实系列之正则表达式Java
- office转pdf和图片实现在线预览
- Notepad++的字体设置加Consolas和微软雅黑混合字体
- 转(js幻灯片,jQuery幻灯,js焦点轮换图,js幻灯轮播代码大全(2) - 酷站代码)...
- Android Studio Text组件介绍
- R语言学习20150414
- android开发培训大纲,华图教育-Android应用开发培训教学大纲
- 浅谈数字媒体艺术中的技术应用-1-技术概述
- CH5202 自然数拆分Lunatic版【完全背包】
- SYN Flood攻击
- Java延时的三种方法
- 2011年年终珠三角为主的各种工种收入大全
- Docker Desktop for Windows 安装过程整理
热门文章
- LeetCode 2110. 股票平滑下跌阶段的数目(滑动窗口)
- LeetCode 1073. 负二进制数相加(负数进制)
- python 数据分析-读写数据csv、xlsx文件
- Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell
- python中的深浅拷贝
- 为什么回归问题用MSE?
- 技术动态 | 人工智能开源软件发展现状连载——知识图谱开源软件
- 玩转算法之面试第九章-动态规划
- java.lang.NoClassDefFoundError: * : Landroid/support/v7/gridlayout/R$styleable 异常终极解决办法
- 【LeetCode】4月5日打卡-Day21-最大子序和问题