/* 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语言)的更多相关文章

  1. tesseract ocr文字识别Android实例程序和训练工具全部源代码

    tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...

  2. Delphi XE5教程3:实例程序

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  3. MSMQ-发送消息到远程专用队列 实例

    目录 一:MSMQ的一些理论上的知识 二:队列类型(Queue Type) 三:安装消息队列 四:在C#中Messagequeue class 五:MSMQ-发送消息到远程专用队列 六:例子   一. ...

  4. C#网络编程TCP通信实例程序简单设计

    C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...

  5. C# 实现单实例程序

    在我们经常使用的软件中,当我们已经打开后,再次打开时,有的软件不会出现两个.例如有道词典,会将上次的界面显示出来,或者提示我们“该程序已经运行...”.我通过一个简单的C# WPF例子来说明. 首先我 ...

  6. Android L Camera2 API 使用实例程序汇总

    在网上发现几个使用Camera API2开发的实例程序,总结一下方便后续参考: 1.Camera2 Basic : https://github.com/googlesamples/android-C ...

  7. Node.js入门实例程序

    在使用Node.js创建实际“Hello, World!”应用程序之前,让我们看看Node.js的应用程序的部分.Node.js应用程序由以下三个重要组成部分: 导入需要模块: 我们使用require ...

  8. 主成分分析、实例及R语言原理实现

    欢迎批评指正! 主成分分析(principal component analysis,PCA) 一.几何的角度理解PCA -- 举例:将原来的三维空间投影到方差最大且线性无关的两个方向(二维空间). ...

  9. 微信小程序开发语言的选择

    微信使用的开发语言和文件很「特殊」. 小程序所使用的程序文件类型大致分为以下几种: ①WXML(WeiXin Mark Language,微信标记语言) ②WXSS(WeiXin Style Shee ...

随机推荐

  1. Hihocoder #1081 最短路径一 dijkstra

    #1081 : 最短路径·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的早上,小Hi和小Ho在经历了一个小时的争论后,终于决定了如何度过这样有意义的一天—— ...

  2. Codechef December Challenge 2014 Chef and Apple Trees 水题

    Chef and Apple Trees Chef loves to prepare delicious dishes. This time, Chef has decided to prepare ...

  3. 你了解for循环吗

    大家学什么语言都会学for循环 可是你真的会用吗 通常写法都是 var arr=arr[1,2,3,4]; for(var i=0;i<arr.length;i++){ console.log( ...

  4. TLC2262和TLC2264 轨对轨运算放大器

    TLC2262和TLC2264分别是TI公司双路和四路运算放大器,两种器件可以在单电源或双电源条件下供电,从而增强了动态的范围,可以达到轨对轨输出的性能.TLC226X系列与TLC225X的微功耗和T ...

  5. Unity中一键创建常用文件夹

    Unity中一键创建常用文件夹 说明 项目测试版本Unity5.3. 这个一个小工具:功能非常简单,就是一键给新建工程添加所有文件夹.到此结束. 但是具体咋操作呢? 与把大象装进冰箱一样,三步,下载代 ...

  6. Appium+python自动化7-输入中文

    前言 在做app自动化过程中会踩很多坑,咱们都是用的中文的app,所以首先要解决中文输入的问题! 本篇通过屏蔽软键盘,绕过手机的软键盘方法,解决中文输入问题. 一.定位搜索 1.打开淘宝点搜索按钮,进 ...

  7. [翻译] 学习iOS开发的建议:如何从菜鸟到专家

    [文章原地址] http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-from-novice-to-expert/ 翻译有误之处请勿见笑, ...

  8. JDBC结合JSP使用(2)

    5. 删除数据 在删除数据的时候,需要指定删除条件,否则会把数据库表中的数据全部删除.在JSP页面中获得删除条件以后,调用JDBC的删除条件,把数据库表中的数据删除.删除操作的JSP页面代码如下: d ...

  9. @Java类加载的过程

    前言 我们写的源程序.java文件经过编译后成为了.class字节码文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机(JVM)之后才能运行和使用.而虚拟机如何加载这些.class文件 ...

  10. Informatica 常用组件Source Qualifier之七 使用排序端口

    使用已排序端口时,PowerCenter 将添加端口至默认查询中的 ORDER BY 子句.PowerCenter Server 将添加配置的端口号,从源限定符转换的顶部开始.在映射中包括以下任何转换 ...