数据结构——队列
来源:互联网 发布:怎么举报淘宝卖家骂人 编辑:程序博客网 时间:2024/05/26 19:14
数据结构——队列
宗旨:技术的学习是有限的,分享的精神是无限的。
1、特性:先进先出(FIFO)
2、应用:
图形的广度优先搜索法
优先队列
操作系统的工作调度
3、用数组仿真队列
(1)队列数组结构
int queue[MAX_SIZE]; //队列最大容量int front = -1; //队列头,随数据的输出变动int rear = -1; //队列尾,随数据的输入变动
(2)数据的存取【数据输入是从后端rear进行,数据取出是从前端front进行】
数据存入队列:将队尾指针往rear后移一位:若队尾rear小于等于队列的最大索引值MAX_SIZE-1,则将数据存入rear所指的数组元素中,否则无法存入数据。
void add_queue(int value){ if(rear >= MAX_SIZE) { printf("thequeue is full!\n"); } else { rear++; queue[rear] = value; }}
数据取出队列:检查队列中是否有数据存在;若头指针front等于尾指针rear,则表示队列中无数据;若头指针不等于尾指针,则将头指针往后移;取出头指针所指的数组元素内容。
int del_queue(void){ int temp; if(front == rear) { return -1; } else { front++; temp = queue[front]; queue[front] = 0; return temp; }}
4、用链表仿真队列
(1)队列链表结构
typedef struct node{ int data; struct node *next;} list, *link;link front = NULL; //向链表顶端的指针link rear = NULL; //向链表尾端的指针
(2)数据的存取
数据输入队列【push】:建立一个新节点;判断队尾指针rear是否为NULL,若为NULL,则此新节点为队列的第一个数据,front和rear都指向它,若不为NULL,将rear所指节点的指针指向新节点,将rear指向新节点。
void add_queue(int value){ link new; new = (link)malloc(sizeof(list)); new-> data = value; new-> next = NULL; if(rear == NULL) { front = new; } else { rear-> next = new -> next; } rear = new;}
数据输出堆栈【pop】:先保留队头指针front所指的位置;将头指针front指向下一个节点;取出之前保留指针所指的节点内容;释放之前保留头指针所指向的节点内容。
int pop(void){ link top; int temp; if(front != NULL) { top = front; front = front -> next; temp = top -> data; free(top); return temp; } return -1;}
5、环形链表
当插入数据时,尾指针rear会向后移动;而输出数据时,头指针front会向后移动。
当尾指针rear等于MAX_SIZE-1时,需回到队列最前端:(rear+ 1)% MAX_SIZE
尾指针等于头指针:
队列为空:front= rear;
队列为满:(rear+ 1)% MAX_SIZE
void add_queue(int value){ rear = (rear + 1) % MAX_SIZE; if(front == rear) { printf("queueis full!\n"); } else { queue[rear] = value; }}int del_queue(void){ int temp; if(front == rear) { return - 1; } temp = queue[front + 1]; //queue[front+ 1] = 0; front = (front + 1) % MAX_SIZE; return temp;}
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 队列——数据结构
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 队列——数据结构
- 数据结构——队列
- 数据结构——队列
- 数据结构——队列
- 简单数据结构—队列
- iOS 自定义绘制内容
- 在ViewPager中获取Fragment
- Java properties存储与读取遍历
- ZigZag Conversion
- BIT2014级软件学院程序设计-18 A Knight's Journey
- 数据结构——队列
- Linux Fedora13系统配置上海交大yum源
- c/c++调用matlab的dll
- 模拟有道云笔记
- Hi~ o(* ̄▽ ̄*)ブ
- zend studio 的主题安装,插件安装、卸载和更新
- revit二次开发中combox控件的应用
- poj 2431Expedition(优先队列+贪心)
- 知识库