博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
队列实例程序(C语言)
阅读量:5327 次
发布时间:2019-06-14

本文共 2777 字,大约阅读时间需要 9 分钟。

/* queue.h */#ifndef _QUEUE_H#define _QUEUE_Hstruct 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 
#include
#define MIN_QUEUE_SIZE 5struct queue_record{ int capacity; int front; int rear; int size; int *array;};voidmake_empty( queue q ){ q->size = 0; q->front = 1; q->rear = 0;}intis_empty( queue q ){ return q->size == 0;}int is_full( queue q ){ return q->size == q->capacity;}queuecreate_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 intsucc( int value, queue q ){ if( ++value == q->capacity ) value = 0; return value;}voidenqueue( 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 ); }}intfront( queue q ){ if( is_empty( q ) ) { printf("empty queue!\n"); exit(0); } else return q->array[q->front];}intfront_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 
intmain(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 )); } }

测试结果:

转载于:https://www.cnblogs.com/nufangrensheng/p/3619435.html

你可能感兴趣的文章
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
罗振宇“时间的朋友”跨年演讲:为做事的人服务 准确抓住小趋势
查看>>
nginx日志切割脚本
查看>>
Mysql multi实现mysql双实例
查看>>
洛谷 P1618 三连击(升级版)
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
React onWheel
查看>>
ASP.NET AJAX调用服务
查看>>
Reflect反编译C#程序
查看>>
如何修改tomcat后台console标题(转)
查看>>
DSAPI 字符串和文件转Md5字符串
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
20165301 2017-2018-2 《Java程序设计》第九周学习总结
查看>>
jquery验证图片类型与大小
查看>>
tomcat启动时出现了Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
查看>>
memcached命令
查看>>
基础测试jmeter5.0+badboy(从小白到入门)
查看>>