重新教自己学算法之线性队列(七)
2015-05-23 21:12
302 查看
线性结构实际上指的就是连续内存的意思。
队列的性质很简单:
(1)队列有头部和尾部
(2)队列从尾部压入数据
(3)队列从头部弹出数据
那么连续内存下的队列是怎么实现的呢?
队列的性质很简单:
(1)队列有头部和尾部
(2)队列从尾部压入数据
(3)队列从头部弹出数据
那么连续内存下的队列是怎么实现的呢?
#include <iostream> #include <cstdlib> #include <cassert> #include <cstring> using namespace std; //结构体的定义 typedef struct _QUEUE_NODE { int* pData; int length; int head; int tail; int count; }QUEUE_NODE; #define STATUS int #define TRUE 1 #define FALSE 0 //申请队列内存 QUEUE_NODE* alloca_queue(int number) { QUEUE_NODE* pQueueNode; if( 0 == number) return NULL; pQueueNode = (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE)); assert(NULL != pQueueNode); memset(pQueueNode, 0 , sizeof(QUEUE_NODE)); pQueueNode->pData = (int*)malloc(sizeof(int) * number); if(NULL == pQueueNode->pData) { free(pQueueNode); return NULL; } pQueueNode->length = number; return pQueueNode; } //释放队列内存 STATUS delete_queue(const QUEUE_NODE* pQueueNode) { if(NULL == pQueueNode) return FALSE; assert(NULL != pQueueNode->pData); free(pQueueNode->pData); free((void*)pQueueNode); return TRUE; } //把数据压入堆栈 STATUS insert_queue(QUEUE_NODE* pQueueNode, int value) { if(NULL == pQueueNode) return FALSE; if(pQueueNode->length == pQueueNode->count) return FALSE; pQueueNode->pData[pQueueNode->tail] = value; pQueueNode->tail = (pQueueNode->tail + 1) % pQueueNode->length; pQueueNode->count++; return TRUE; } //把数据弹出队列 STATUS get_queue_data(QUEUE_NODE* pQueueNode, int* value) { if(NULL == pQueueNode || NULL == value) return FALSE; if(0 == pQueueNode->count) return FALSE; *value = pQueueNode->pData[pQueueNode->head]; pQueueNode-> pData[pQueueNode->head] = 0; pQueueNode-> count --; pQueueNode->head = (pQueueNode->head + 1) % pQueueNode->length; return TRUE; } //统计当前队列中有多少数据 int get_total_number(const QUEUE_NODE* pQueueNode) { if(NULL == pQueueNode) return 0; return pQueueNode->count; } //查看队列中初始化的时候总长度是多少 int get_total_length(const QUEUE_NODE* pQueueNode) { if(NULL == pQueueNode) return 0; return pQueueNode->length; } void output_queue(const QUEUE_NODE* pQueueNode) { for (int i = 0; i < pQueueNode->length; ++i) { cout<<pQueueNode->pData[i]<<" "; } cout<<endl; } int main(int argc, char const *argv[]) { QUEUE_NODE* pQueueNode = alloca_queue(3); insert_queue(pQueueNode,18); insert_queue(pQueueNode,20); cout<<get_total_number(pQueueNode)<<endl; cout<<get_total_length(pQueueNode)<<endl; insert_queue(pQueueNode,2); int *number; get_queue_data(pQueueNode,number); cout<<*number<<endl; insert_queue(pQueueNode,22); output_queue(pQueueNode); get_queue_data(pQueueNode,number); output_queue(pQueueNode); }
相关文章推荐
- 重新教自己学算法之线性堆栈(八)
- 重新教自己学算法之图的最短路(十二)
- 第12周 数据结构和算法 线性表-7 队列 插入、删除
- 重新教自己学算法之单向链表(九)
- 【算法和数据结构】_9_线性结构_队列_续_1
- 重新教自己学算法之单词统计(状态机)(十)
- 线性表:链式队列算法实现
- 一步一步写算法(之线性队列)
- 【算法和数据结构】_4_线性结构_队列
- 【算法和数据结构】_4_线性结构_队列
- 自己做的demo---c语言的基本语法,过阵子可以重新写一些算法跟数据结构了
- C++类模板 实现循环队列的顺序存储结构算法 《数据结构》(北京科海) 部分摘抄 自己编写实现
- 重新教自己学算法之非递归排序——冒泡-插入-排序(三)
- 顺序栈S中有2n个元素,从栈顶到栈底的元素依次为a2n、a2n-1、…、a1。试设计一个算法:通过一个循环队列重新排列该栈中的元素,使得从栈顶到栈底的元素先偶数,后奇数
- Java数据结构与算法—及实现 线性表 顺序表、链表、栈、队列详解
- 重新教自己学算法之递归排序——快速排序(四)
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)
- java自己实现的线性队列
- 一步一步写算法(之线性循环队列) (转)
- 线性表:顺序队列算法实现