queue.c

功能函数:

#include "queue.h"

static void CopyToNode(Item item,Node *pn)

{

pn->item = item;

}

static void CopyToItem(Node *pn, Item *pi)

{

*pi = pn->item;

}

/* 把队列初始化为空,就是设置尾指针为NULL并设置项数(items成员)为0 */

void InitializeQueue(Queue *pq)

{

pq->front = pq->rear = NULL;

pq->items = 0;

}

bool QueueIsFull( const Queue *pq)

{

return (pq->items == MAXQUEUE);

}

bool QueueIsEmpty( const Queue *pq)

{

return (pq->items == 0);

}

int QueueItemCount(const Queue *pq)

{

return pq->items;

}

bool EnQueue( Item item,Queue *pq)

{

Node * pnew;

if (QueueIsFull(pq))

{

return false;

}

pnew = (Node *)malloc(sizeof(Node));

if (pnew == NULL)

{

fprintf(stderr, "Unable to allocate memory!\n");

exit(1);

}

CopyToNode(item,pnew);

pnew->next = NULL;

if (QueueIsEmpty(pq))

{

pq->front = pnew;/* 项目位于队列首端 */

}

else

{

pq->rear->next = pnew;/* 链接到队列尾端 */

}

pq->rear = pnew;/* 记录队列尾端的位置 */

pq->items++;/* 队列项目个数增1 */

return true;

}

bool DeQueue( Item *pitem, Queue *pq)

{

Node *pt;

if (QueueIsEmpty(pq))

{

return false;

}

CopyToItem(pq->front,pitem);

pt = pq->front;

pq->front = pq->front->next;

free(pt);

pq->items--;

if (pq->items == 0)

{

pq->rear = NULL;

}

return true;

}

void EmptyTheQueue(Queue *pq)

{

Item dummy;

while (!QueueIsEmpty(pq))

{

DeQueue(&dummy,pq);

}

}

测试程序:

#include "queue.h"

int main(void)

{

Queue line;

Item temp;

char ch;

InitializeQueue(&line);

puts("Testing the queue interface, type a to add a value,");

puts("type d to delete a value ,and type q to quit");

while((ch =getchar())!= 'q')

{

if (ch !='a' && ch != 'd')

{

continue;

}

if (ch == 'a')

{

printf("integer to add:\n");

scanf("%d",&temp);

if (!QueueIsFull(&line))

{

printf("Putting %d into queue\n",temp);

EnQueue(temp,&line);

}

else

{

puts("Queue is full");

}

}

else

{

if (QueueIsEmpty(&line))

{

puts("没有了");

}

else

{

DeQueue(&temp,&line);

printf("删除了%d\n",temp);

}

}

printf("%d item in queue\n",QueueItemCount(&line));

puts("type a to add ,d to delete, q to quit:");

}

EmptyTheQueue(&line);

puts("bye!");

}

c语言编程安全队列,C语言编程队列的实现相关推荐

  1. 贪吃蛇统计分数的c语言代码,C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!...

    接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...

  2. 语言翻译成汇编语言_学习编程有没有必要从C语言和C++学起?应该怎么学?

    硬件层级:这里也就是实体硬件,包括:CPU.内存.显卡等等...这些都不属于软件的范畴内. 汇编层级:在之前没有C/C++以及java之前,是汇编的年代.那么汇编语言对于我们来说,可读性是很查的,不适 ...

  3. 换硬币c语言编程_如何才能成为编程高手?别人都不告诉你的东西,我来说给你听...

    在IT行业摸爬滚打十几年的应该知道,下面简单说说关于编程需要掌握的技术与相关知识.很多人感觉编程很难.很多人问我,我英语不好,数学不好能做编程吗? 我非常肯定的说,能做编程.编程的领域很广泛.细分出来 ...

  4. 自学编程是从python语言还是c语言开始-初中生想学编程,请问先学C语言好还是先学Python?...

    市面上常见的几种编程语言就是:c,c++,c#,java,python,这几种我都学过,所以建议从python开始. 原因就是: (1)python简单好上手 c的数据类型很麻烦,而python就相对 ...

  5. 自学编程是从python语言还是c语言开始-非计算机专业大学生想自学编程应该学C语言还是学Python?...

    之前总结的文章,分享过来,希望对你有帮助.windliang:到底学哪一门编程语言​zhuanlan.zhihu.com 发展进程 学哪一门编程语言,我们不妨先梳理一下语言的发展过程. 机器语言 计算 ...

  6. python和c哪个适合入门-编程入门选什么语言好?C 语言还是Python ?为你解析

    前面我分享过计算机行业已经成了学校选择排名第一,家长和学生都很看好计算机类专业.现在IT行业也越来越火爆,程序员越来越被人看好.面对相比同龄人高薪资的诱惑,人们很难不心动,即使秃头也值得! 那么问题来 ...

  7. python编程和c语言编程的区别-C语言 python Java 等主要流行编程语言优劣对比

    如果一个IT小白准备进入IT开发行列,是该选Java呢还是另外的开发语言呢?开发一直是一个倍受争议的话题,那么其实这个问题并没有标准答案. 分享之前我还是要推荐下我自己的C/C++学习交流群:三四零六 ...

  8. “主要的编程范型”及其语言特性关系(多图)

    "主要的编程范型"(The principal programming paradigms)这幅图,其实出现得不算早,作者在2007年完成了该图的1.0版,到2008年更新至v1. ...

  9. 《快乐编程大本营》java语言训练班-第4课:java流程控制

    <快乐编程大本营>java语言训练班-第4课:java流程控制 第1节. 顺序执行语句 第2节. 条件分支语句:if条件语句 第3节. 条件分支语句:switch 条件语句 第4节. 条件 ...

  10. 二级c语言上机编程技巧,二级C语言上机编程题技巧总结

    二级C语言上机编程题技巧 一. 方法总结 1. 二级C语言上机编程题在二级上机考试中属于较难题型,因此很多同学都害怕通过不了.综合 往年的考试,结合考试大纲,每年考试的编程题都有一定的规律和方法,只要 ...

最新文章

  1. Redis (二)_ jedis的使用
  2. R语言glmnet拟合岭回归模型实战:岭回归模型的模型系数(ridge regression coefficients)及可视化、岭回归模型分类评估计算(混淆矩阵、accuracy、Deviance)
  3. CVPR 2022放榜!录用 2067 篇,接收数量上升24%
  4. 002-Zabbix-网络设备自动监控(cisco)
  5. 【PC工具】在线MP3转WAV工具,MP3文件转换成arduino可以直接播放的wav格式
  6. 个人创业做什么好?以下这几个值得考虑
  7. XML文件转换成字符串互相转换操作
  8. linux编译bzip2,linux bzip2 命令详解
  9. super(XXXX,self).__init__()在类中的作用
  10. 国际化的支持--多编码问题
  11. 国外计算机应用基础,计算机应用基础试题(国外英文资料).doc
  12. 彼得德鲁克《卓有成效的管理者》——阅读摘要
  13. 明尼苏达大学双城分校计算机科学,明尼苏达大学双城分校计算机专业研究生需要满足哪些条件?...
  14. mysql tar 卸载_mysql linux 安装卸载
  15. 1.9w粉丝带动近100w播放量,推广黑马不止一位
  16. 泰国计算机专业大学排名,清迈大学在泰国的排名
  17. idear右边的依赖视图没了_APP开发中出现提到的Idear是什么意思
  18. PAT 1124 Raffle for Weibo Followers
  19. 学术英语理工(第二版)Unit1课文翻译
  20. java定义语法解析器,java开发工具intellij idea使用教程:定义语法和解析器.pdf

热门文章

  1. LeetCode 64. 最小路径和(DP)
  2. 协程asyncio_Asyncio深入浅出
  3. ztree在刷新时第一个父节点消失_第一个关于中式菜谱的智能问答机器人小程序正式上线啦...
  4. java 以太坊 智能合约_web3j教程:java使用web3j开发以太坊智能合约交易
  5. 生物信息考研C语言,四川大学生物信息学初试经验分享
  6. Android远程调试的探索与实现
  7. Yann LeCun最新访谈:能量模型是通向自主人工智能系统的起点
  8. SpringBoot RequestBody ajax提交对象
  9. 从源码的角度再看 React JS 中的 setState
  10. 树状数组-神奇的二进制