队列实例程序(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 ...
随机推荐
- JavaScript中的callee与caller的区别
1.callee callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数 作用:就是用来指向当前对象 返回正被执行的 Function 对象,也就是所指定的 Functi ...
- angularjs-ui插件ui-select和html的select注意事项及区别
项目中使用了angular-ui里的ui-select指令,地址https://github.com/angular-ui/ui-select 1. ng-model没有双向数据绑定 最开始没有看手册 ...
- 华为S5300系列升级固件S5300SI-V100R006C00SPC800.cc
这个固件附带了web,V100R005可以直接升级到这个版本,但没什么必要,因为V100R005本身可以直接升级到V200. 升级小插曲: 1.升级的使用使用Windows,不要用Mac或者Linux ...
- HDU 2089 不要62(数位DP·记忆化搜索)
题意 中文 最基础的数位DP 这题好像也能够直接暴力来做 令dp[i][j]表示以 j 开头的 i 位数有多少个满足条件 那么非常easy有状态转移方程 dp[i][j] = sum{ dp[ ...
- High Voltage Boost Supply
http://learn.adafruit.com/ice-tube-clock-kit/design Tubes such as VFDs, Nixies, Decatrons, etc requi ...
- [MSDN] Windows Server 2012 R2 简/繁/英下载
Windows Server 2012 R2 Chinese-Simplified ISO SHA1-------------------------------------------------- ...
- JSPGen4 自学路线图
- 线程系列06,通过CLR代码查看线程池及其线程
在"线程系列04,传递数据给线程,线程命名,线程异常处理,线程池"中,我们已经知道,每个进程都有一个线程池.可以通过TPL,ThreadPool.QueueUserWorkItem ...
- C#程序集系列06,程序集清单,EXE和DLL的区别
CLR在加载程序集的时候会查看程序集清单,程序集清单包含哪些内容呢?可执行文件和程序集有什么区别/ 程序集清单 □ 查看程序集清单 →清空F盘as文件夹中的所有内容→创建MainClass.cs文件→ ...
- OpenShift 项目的备份和恢复实验
本测试记录从openshift 3.6环境中导出项目,然后在将项目环境恢复到Openshift 3.11中所需要的步骤 从而指导导入导出的升级过程. 1.安装Openshift 3.6版本 过程略 2 ...