数据结构学习之_循环队列
2013-03-26 22:39
281 查看
/* 2013年3月26日 21:40:14 xulei 队列: 满足先进先出的序列. 通常可分为: 链式队列(内部是链表), 静态队列(内部是数组) 队列的第一个节点: 队头(front), 允许删除(出队), 指向第一个有效节点. 队列的最后一个节点: 队尾(rear), 允许插入(入队), 指向最后一个有效节点的下一个节点. 静态队列通常都必须是循环队列. 循环队列的操作: 如一个10个元素的数组进行循环队列的操作. 1. 入队, 将新元素放在rear的位置, rear位置加1, 若越界则回到第一个元素位置(rear = (rear + 1)%(数组长度) 2. 出队, front 加1, 若越界则回到第一个元素位置(front = (front + 1)%(数组长度) 3. 判断为空: front == rear 时为空. 4. 判断为满: (rear + 1)%(数组长度) == front 时为满. */ #include <stdio.h> #include <malloc.h> struct queue { int *base; // 指向一个数组(假设为一个整形数组) int front; int rear; }; // 初始化 int init_queue(struct queue *q) { q->base = (int *)malloc(sizeof(int)*10); // 假设为10个整形元素的数组 if(q->base == NULL) { printf("初始化分配内存失败, 退出!\n"); return -1; } q->front = q->rear = 0; // rear 和 front 都指向第一个元素. return 0; } // 判断是否已满, 满返回1, 不满返回0; int is_full(struct queue *q) { if((q->rear + 1)%10 == q->front ) return 1; else return 0; } // 判断是否为空 int is_empty(struct queue *q) { if(q->rear == q->front) return 1; else return 0; } // 入队, 为空返回1, 不空返回0 int en_queue(struct queue *q, int val) { if(is_full(q)) { printf("队列已满, 入队失败!\n"); return -1; } q->base[q->rear] = val; q->rear = (q->rear + 1)%10; return 0; } // 出队 int del_queue(struct queue *q) { if(is_empty(q)) { printf("队列为空, 出队失败!\n"); return -1; } q->front = (q->front + 1)%10; return 0; } // 打印出所有元素 int show_queue(struct queue *q) { int i = q->front; while(i != q->rear) { printf("%d ", q->base[i]); i = (i+1)%10; } printf("\n"); return 0; } int main(int argc, char **argv) { struct queue q; init_queue(&q); del_queue(&q); show_queue(&q); en_queue(&q, 100); en_queue(&q, 82); en_queue(&q, 74); en_queue(&q, 79); en_queue(&q, 87); en_queue(&q, 82); en_queue(&q, 54); en_queue(&q, 77); show_queue(&q); en_queue(&q, 94); en_queue(&q, 41); en_queue(&q, 41); show_queue(&q); return 0; }
相关文章推荐
- java菜鸟学习数据结构——准备篇1(内存分配原理)
- 自己用的unity学习笔记(三)——数据结构相关
- 数据结构(Java 插入排序模拟)本代码重在学习数据结构思路,代码完整性欠缺,请见谅
- 数据结构学习笔记-栈的顺序存储(C语言实现)
- 数据结构学习(一)
- 数据结构和算法学习第3天:队列的相关知识
- 学习笔记:数据结构、算法::求最大子列和
- nginx 学习笔记(三)基本数据结构
- 数据结构学习记录连载10(队列提高要求实现)
- 数据结构学习之集合
- 数据结构学习入门
- Scala学习1.2 Scala中Array Map等数据结构实战
- C#数据结构和算法学习系列十一----构建字典DictionaryBase 类和SortedList 类
- 数据结构学习笔记--串的模式匹配
- 数据结构学习笔记——树
- 数据结构学习笔记(二) 链表之用循环链表解决约瑟夫问题
- 学习python :基本数据结构 通过学习fast-rcnn源码架构
- 数据结构学习——动态逆序对
- 对学习数据结构的建议
- 《数据结构》学习笔记--第一章绪论