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语言实现—队列操作相关推荐

  1. c语言编程队列题,数据结构C语言编程 队列.doc

    数据结构C语言编程 队列 #include #include #define MAXQSIZE 10 typedef struct { int *base; //存储空间的起始地址,即数组的首地址,即 ...

  2. 三星手机电池循环清零代码_数据结构(C语言)-循环队列基本操作

    队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构. 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列 ...

  3. 数据结构c语言循环队列代码,数据结构C语言实现----循环队列

    代码如下: #include #include typedef char ElemType; #define MAXQUEUE 100 typedef struct { ElemType *base; ...

  4. c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)

    数据结构(C语言版)例题(第三章:栈和队列) 数据结构(C语言版)例题(第三章:栈和队列) (2008-05-09 12:33:13) 转载▼ ◆3.15③ 假设以顺序存储结构实现一个双向栈,即在一维 ...

  5. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  6. 数据结构(C语言第二版)严蔚敏编,数据结构电子教材,线性表,栈,队列,顺序存储结构,初始化,入栈,出栈,入队,出队,c++

    前言 提示:本篇文章收录严蔚敏编写的数据结构C语言版本 简单介绍一下顺序表,顺序栈,循环队列,的顺序存储结构之间的区别 代码参考严蔚敏编写的<数据结构>,二维码动态演示可扫码可观看. - ...

  7. 【数据结构 C语言版】第六篇 栈、队列经典必刷面试考研题

    [数据结构 C语言版]第六篇 栈.队列经典必刷面试考研题 写在前面 更新情况记录: 最近更新时间 更新次数 2022/10/20 1 参考博客与书籍以及链接: (非常感谢这些博主们的文章,将我的一些疑 ...

  8. 【数据结构 C语言版】第五篇 队列(看完刷题无敌)

    [数据结构 C语言版]第五篇 队列(看完刷题无敌) 写在前面 更新情况记录: 最近更新时间 更新次数 2022/10/19 1 参考博客与书籍以及链接: (非常感谢这些博主们的文章,将我的一些疑问得到 ...

  9. 数据结构——栈与队列操作(用栈模拟队列)

    [栈与队列操作] 问题描述:假设有两个长度相同的栈 S1,S2,已知以下入栈.出栈.判栈满和判栈空操作: void Push(S,x); Elemtype Pop(S); bool StackFull ...

最新文章

  1. Mac环境下svn的使用
  2. 使用命令行加载 jMeter 自定义配置文件里的自定义 property
  3. linux下gdb常用的调试命令
  4. 财付通 android api,财付通API接口文档.doc
  5. substance design graph 不显示_每天1分钟背单词 词根 graph
  6. 【特色团队采访】实力队伍鱼遇雨欲语与余比赛经验分享
  7. SpringBoot系列: 所有配置属性和官方文档
  8. J2SE基础夯实系列之正则表达式Java
  9. office转pdf和图片实现在线预览
  10. Notepad++的字体设置加Consolas和微软雅黑混合字体
  11. 转(js幻灯片,jQuery幻灯,js焦点轮换图,js幻灯轮播代码大全(2) - 酷站代码)...
  12. Android Studio Text组件介绍
  13. R语言学习20150414
  14. android开发培训大纲,华图教育-Android应用开发培训教学大纲
  15. 浅谈数字媒体艺术中的技术应用-1-技术概述
  16. CH5202 自然数拆分Lunatic版【完全背包】
  17. SYN Flood攻击
  18. Java延时的三种方法
  19. 2011年年终珠三角为主的各种工种收入大全
  20. Docker Desktop for Windows 安装过程整理

热门文章

  1. LeetCode 2110. 股票平滑下跌阶段的数目(滑动窗口)
  2. LeetCode 1073. 负二进制数相加(负数进制)
  3. python 数据分析-读写数据csv、xlsx文件
  4. Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell
  5. python中的深浅拷贝
  6. 为什么回归问题用MSE?
  7. 技术动态 | 人工智能开源软件发展现状连载——知识图谱开源软件
  8. 玩转算法之面试第九章-动态规划
  9. java.lang.NoClassDefFoundError: * : Landroid/support/v7/gridlayout/R$styleable 异常终极解决办法
  10. 【LeetCode】4月5日打卡-Day21-最大子序和问题