c语言静态数组创建队列
来源:互联网 发布:linux扩大home分区 编辑:程序博客网 时间:2024/05/22 19:15
关于队列的接口名称并没有统一的约定,具体的方法也没有严格的限制,这里使用在队列头部删除,在队列尾部加入新元素的方法,
关于接口的定义如下:
- insert() 表示插入到队列头部
- delete() 表示从队列尾部删除数组
- is_full() 判断队列是否为满
- is_empty() 判断队列是否为空
- first() 获得队列的头部元素
- last() 获得队列尾部元素
- queue_size() 获得已使用队列的长度
queue.h
#ifndef QUEUE_H#define QUEUE_H#include <stdio.h>#define QUEUE_TYPEint /*define the type of the queue*//**create queue *only for dynamic_shuzu_queue */void create_queue(size_t size);/**destory_queue*only for list_queue and dynamic_shuzu_queue*/void destory_queue(void);//insertvoid insert(QUEUE_TYPE value);//deletevoid delete(void);//firstQUEUE_TYPE first(void);//lastQUEUE_TYPE last(void);//queue_sizeint queue_size(void);//is_emptyint is_empty(void);//is_fullint is_full(void);#endif /*QUEUE_H*/
queue.c
#include <stdio.h>#include "queue.h"#include <assert.h>/* *使用循环数组带来了队列空与队列满时front和rear相同的问题*解决方法一:定一个变量queue_size用来记录数据的长度**解决方法二:使用循环数组不填满的技术,保持数组中始终有一个元素不使用,rear从比front小1的位置开始,最大到循环位置中front的前2个位置* 即:空为(rear+1)%QUEUE_SIZE==front满为(rear+2)%QUEUE_SIZE==front*/#define QUEUE_SIZE 10#define ARRAY_SIZE (QUEUE_SIZE+1) static QUEUE_TYPE queue[ARRAY_SIZE];static int front=1;static int rear=0;//insertvoid insert(QUEUE_TYPE value){assert(!is_full());rear=(++rear)%ARRAY_SIZE;queue[rear]=value;}//deletevoid delete(void){assert(!is_empty());front=(++front)%ARRAY_SIZE;}//firstQUEUE_TYPE first(void){assert(!is_empty());return queue[front];}//lastQUEUE_TYPE last(void){assert(!is_empty());return queue[rear];}//queue_sizeint queue_size(void){if(is_empty()){return 0;}else if(rear>=front){return rear+1-front;}else{return ARRAY_SIZE-front+rear+1;}}//is_emptyint is_empty(void){return (rear+1)%ARRAY_SIZE==front;}//is_fullint is_full(void){return (rear+2)%ARRAY_SIZE==front;}
queuetest.h
/**测试循环数组队列*/#include <stdio.h>#include "queue.h"void main(){int i=0;for(i=1;i<=11;i++){printf("queue size: %2ld\n",queue_size());if(is_full()){printf("the queue is full now!\n");break;}insert(i);printf("front : %2ld\trear: %2ld \n",first(),last());} for(i=1;i<=11;i++){printf("queue size: %2ld\n",queue_size());if(is_empty()){printf("the queue is empty now!\n");break;}printf("front : %2ld\trear: %2ld \n",first(),last());delete();}}
运行编译命令: gcc -o queuetest queue.c queuetest.c
运行结果:
queue size: 0front : 1rear: 1 queue size: 1front : 1rear: 2 queue size: 2front : 1rear: 3 queue size: 3front : 1rear: 4 queue size: 4front : 1rear: 5 queue size: 5front : 1rear: 6 queue size: 6front : 1rear: 7 queue size: 7front : 1rear: 8 queue size: 8front : 1rear: 9 queue size: 9front : 1rear: 10 queue size: 10the queue is full now!queue size: 10front : 1rear: 10 queue size: 9front : 2rear: 10 queue size: 8front : 3rear: 10 queue size: 7front : 4rear: 10 queue size: 6front : 5rear: 10 queue size: 5front : 6rear: 10 queue size: 4front : 7rear: 10 queue size: 3front : 8rear: 10 queue size: 2front : 9rear: 10 queue size: 1front : 10rear: 10 queue size: 0the queue is empty now!
- c语言静态数组创建队列
- 静态数组实现队列(C语言)
- 静态数组实现循环队列 c语言
- c语言静态数组创建栈
- c语言--静态数组创建树
- c语言数组方式实现静态循环队列
- C语言实现使用静态数组实现循环队列
- C语言数组实现队列
- C语言之数组队列
- c 语言创建动态数组
- C语言创建柔性数组
- C语言创建柔性数组
- C语言动态创建数组
- 基于数组的队列实现(C语言)
- C语言队列实现( 动态数组 )
- C语言循环数组做FIFO队列
- 使用数组实现队列(C语言)
- C语言数组实现循环队列
- HBase技术介绍
- GDB教程(查看内存)
- Oracle学习(一)
- hdu 3722 Card Game (KM )
- 用数据管理过程(4)——超级量化管理(持续优化级)及总结
- c语言静态数组创建队列
- Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)
- Linux ALSA声卡驱动之七:ASoC架构中的Codec
- Perl中字符串编码的处理
- 为什么Hadoop是用Java实现的?
- IOS获取手机号(私有API)
- 出售双拼COM域名
- POJ 2318 TOYS(计算几何+点与直线位置关系+二分)
- sizeof的相关用法