队列的数组实现
2016-03-18 00:50
441 查看
数据结构与算法分析——c语言描述 第三章 队列的数组实现
注意rear和front初始化的赋值。
queue.h
queue.c
main.c
注意rear和front初始化的赋值。
queue.h
typedef int ElementType; #ifndef _Queue_h #define _Queue_h struct QueueRecord; typedef struct QueueRecord *Queue; int isEmpty(Queue q); int isFull(Queue q); Queue createQueue(int maxElements); void disposeQueue(Queue q); void makeEmpty(Queue q); void enqueue(ElementType X, Queue q); ElementType front(Queue q); void dequeue(Queue q); ElementType frontAndDequeue(Queue q); #endif
queue.c
#include"queue.h" #include"fatal.h" #include<stdlib.h> #define MinQueueSize (5) struct QueueRecord{ int capacity; int front; int rear; int size; ElementType *array; }; int isEmpty(Queue q) { return q->size == 0; } int isFull(Queue q) { return q->size == q->capacity; } Queue createQueue(int maxElements) { if (maxElements < MinQueueSize) Error("Queue size is too small"); Queue q = malloc(sizeof(struct QueueRecord)); if (q == NULL) Error("out of memory"); q->array = malloc(maxElements*sizeof(ElementType)); if(q->array==NULL) Error("out of memory"); q->capacity = maxElements; makeEmpty(q); return q; } void makeEmpty(Queue q) { q->size = 0; q->front = 1;//这个是重点啊,当增加一个元素之后,rear和front同时都是1 q->rear = 0; } void enqueue(ElementType X, Queue q) { if (isFull(q)) Error("queue is full"); q->size++; q->rear = (q->rear + 1) % q->capacity; q->array[q->rear] = X; } ElementType front(Queue q) { if (isEmpty(q)) Error("queue is empty"); return q->array[q->front]; } void dequeue(Queue q) { if (isEmpty(q)) Error("queue is empty"); q->size--; q->front = (q->front + 1) % q->capacity; } ElementType frontAndDequeue(Queue q) { ElementType x = front(q); dequeue(q); return x; }
main.c
#include<stdlib.h> #include<stdio.h> #include"queue.h" int main() { Queue q = createQueue(50); for (int i = 0; i < 8; i++){ enqueue(i, q); } printf("%d\n", frontAndDequeue(q)); printf("%d\n", frontAndDequeue(q)); printf("%d\n", frontAndDequeue(q)); }
相关文章推荐
- 移动端开发的那些坑
- Linux内核分析第四周总结
- 【Linux工具】GIT+Gollum在Ubuntu下搭建本地WIKI编辑系统
- Linux kernel 的 sendfile 是如何提高性能的
- cf #327 div2 C.Median Smoothing
- WPF入门介绍
- 复数的四则运算
- java---servlet学习笔记
- 《Linux内核分析》--扒开系统调用的三层皮 20135311傅冬菁
- BZOJ 3172:后缀数组
- 事务隔离级别
- 使用动态内存求解任意矩阵的乘法
- Hive 官方手册学习(一) Hive命令行
- 开发笔记- iOS监听某些事件的方法简单梳理
- Java ActiveMQ 讲解(一)理解JMS 和 ActiveMQ基本使用(转)
- Monkey API学习与脚本编写小记
- CheckBoxList取值与初始化
- MongoDB一些进阶操作(索引,批量操作,分片)
- make
- 【Three.js】入门-坐标系精讲