队列实例程序(C语言)
- /* queue.h */
- #ifndef _QUEUE_H
- #define _QUEUE_H
- struct queue_record;
- typedef struct queue_record *queue;
- int is_empty( queue q );
- int is_full( queue q );
- queue create_queue( int max_elements );
- void dispose_queue( queue q );
- void make_empty( queue q );
- void enqueue( int x, queue q );
- int front( queue q );
- void dequeue( queue q );
- int front_and_dequeue( queue q );
- #endif
- /* queue.c */
- #include "queue.h"
- #include <stdio.h>
- #include <stdlib.h>
- #define MIN_QUEUE_SIZE 5
- struct queue_record
- {
- int capacity;
- int front;
- int rear;
- int size;
- int *array;
- };
- void
- make_empty( queue q )
- {
- q->size = 0;
- q->front = 1;
- q->rear = 0;
- }
- int
- is_empty( queue q )
- {
- return q->size == 0;
- }
- int
- is_full( queue q )
- {
- return q->size == q->capacity;
- }
- queue
- create_queue( int max_elements )
- {
- queue q;
- if( max_elements < MIN_QUEUE_SIZE )
- {
- printf("Queue size is too small!\n");
- exit(0);
- }
- q = malloc( sizeof(struct queue_record) );
- if(q == NULL)
- {
- printf("Out of space!\n");
- exit(1);
- }
- q->array = malloc(sizeof(int) * max_elements);
- if(q->array == NULL)
- {
- printf("Out of space!\n");
- exit(1);
- }
- q->capacity = max_elements;
- make_empty(q);
- return q;
- }
- static int
- succ( int value, queue q )
- {
- if( ++value == q->capacity )
- value = 0;
- return value;
- }
- void
- enqueue( int x, queue q )
- {
- if( is_full( q ) )
- {
- printf("full queue!\n");
- exit(0);
- }
- else
- {
- q->size++;
- q->rear = succ( q->rear, q );
- q->array[q->rear] = x;
- }
- }
- void
- dequeue( queue q )
- {
- if( is_empty( q ) )
- {
- printf("empty queue!\n");
- exit(0);
- }
- else
- {
- q->size--;
- q->front = succ( q->front, q );
- }
- }
- int
- front( queue q )
- {
- if( is_empty( q ) )
- {
- printf("empty queue!\n");
- exit(0);
- }
- else
- return q->array[q->front];
- }
- int
- front_and_dequeue( queue q )
- {
- int tmp;
- if( is_empty( q ) )
- {
- printf("empty queue!\n");
- exit(0);
- }
- else
- {
- tmp = q->array[q->front];
- q->size--;
- q->front = succ( q->front, q );
- return tmp;
- }
- }
- void
- dispose_queue( queue q )
- {
- if( q != NULL )
- {
- free(q->array);
- free(q);
- }
- }
- /* queue_test.c */
- #include "queue.h"
- #include <stdio.h>
- int
- main(void)
- {
- queue q;
- int tmp;
- int i;
- q = create_queue(10);
- printf("1 enqueue\n");
- enqueue(1, q);
- printf("2 enqueue\n");
- enqueue(2, q);
- printf("3 enqueue\n");
- enqueue(3, q);
- printf("4 enqueue\n");
- enqueue(4, q);
- printf("5 enqueue\n");
- enqueue(5, q);
- printf("\n");
- for(i=0; i<5; i++)
- {
- printf("dequeue %d\n", front_and_dequeue( q ));
- }
- }
测试结果:
队列实例程序(C语言)的更多相关文章
- tesseract ocr文字识别Android实例程序和训练工具全部源代码
tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...
- Delphi XE5教程3:实例程序
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- MSMQ-发送消息到远程专用队列 实例
目录 一:MSMQ的一些理论上的知识 二:队列类型(Queue Type) 三:安装消息队列 四:在C#中Messagequeue class 五:MSMQ-发送消息到远程专用队列 六:例子 一. ...
- C#网络编程TCP通信实例程序简单设计
C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...
- C# 实现单实例程序
在我们经常使用的软件中,当我们已经打开后,再次打开时,有的软件不会出现两个.例如有道词典,会将上次的界面显示出来,或者提示我们“该程序已经运行...”.我通过一个简单的C# WPF例子来说明. 首先我 ...
- Android L Camera2 API 使用实例程序汇总
在网上发现几个使用Camera API2开发的实例程序,总结一下方便后续参考: 1.Camera2 Basic : https://github.com/googlesamples/android-C ...
- Node.js入门实例程序
在使用Node.js创建实际“Hello, World!”应用程序之前,让我们看看Node.js的应用程序的部分.Node.js应用程序由以下三个重要组成部分: 导入需要模块: 我们使用require ...
- 主成分分析、实例及R语言原理实现
欢迎批评指正! 主成分分析(principal component analysis,PCA) 一.几何的角度理解PCA -- 举例:将原来的三维空间投影到方差最大且线性无关的两个方向(二维空间). ...
- 微信小程序开发语言的选择
微信使用的开发语言和文件很「特殊」. 小程序所使用的程序文件类型大致分为以下几种: ①WXML(WeiXin Mark Language,微信标记语言) ②WXSS(WeiXin Style Shee ...
随机推荐
- 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”
报错内容如下: 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM对象强制转换为接口类型“Microsoft.Office.Inte ...
- MySQL增强版命令行客户端连接工具(mycli)
效果: 安装: http://www.mycli.net/install 官网: http://www.mycli.net/install
- 使用LM2576制作数控电源
http://www.daxia.com/bibis/moredata30_1207792_29862.shtml 图中DA和PWM任选其一, 当DA或PWM输出为0~1.25V时,输出在12.5V~ ...
- Java-子类扩展父类功能
class person { private String name; private int age; public String getname(){ return this.name; ...
- mysql 源代码编绎
http://blog.chinaunix.net/uid-20723616-id-769326.html https://software.intel.com/zh-cn/blogs/2010/08 ...
- AWR--service statistics
近期发现一个奇怪的现象,数据库报告上看负载非常高.可是cpu和等待事件都非常低,不知道消耗的资源跑到哪里去了? Snap Id Snap Time Sessions Cursors/Session B ...
- Windows Server 2003 R2 IIS服务的命令行方式重启命令
iisreset /RESTART 停止后启动 iisreset /START 启动IIS (如果停止) iisreset /STOP 停止IIS (如果启动) iisreset /REB ...
- 怎么上传自己的代码/项目到自己的github仓库上
创建新的git仓库 设置新仓库 创建完成后 复制git地址 现在已经有window git客户端了(地址:https://desktop.github.com/),但还是建议用git命 ...
- Android之MVC——Model通知View去更新(实用)
下面两段标红加深的代码是重点: import android.app.Activity; import android.os.Bundle; import android.view.View; imp ...
- chromium对网页获取favicon
每一个网页都有一个favicon,在历史记录的保存中须要用到.在content文件夹下,这个没有实现. 以下说一下我的实现过程: web_contents_impl.cc文件里有方法:WebConte ...