栈和队列
个人信息:就读于燕大本科软件工程专业 目前大三;
本人博客:google搜索“cqs_2012”即可;
个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;
编程语言:C++ ;
编程坏境:Windows 7 专业版 x64;
编程工具:vs2008;
制图工具:office 2010 powerpoint;
硬件信息:7G-3 笔记本;
栈(先进后出)
栈数据结构设计(用链表)
接口1:返回长度操作(设计类成员变量跟踪栈长度)
接口2:判空操作(利用长度成员判断)
接口3:插入栈顶(链表尾部插入,长度更新)
接口4:出栈操作(栈不空时链表尾部删除并释放,长度更新)
栈数据结构设计(用顺序表)
接口1:返回长度操作(设计类成员变量跟踪栈长度)
接口2:判空操作(利用长度成员判断)
接口3:插入栈顶(表空间足够时顺序表数据域尾部插入,否则扩大空间,长度更新)
接口4:出栈操作(栈不空时顺序表数据域尾部删除,长度更新)
队列(先进先出)
队列数据结构设计(用链表)
队列数据结构设计(用顺序表)接口1:返回长度操作(设计类成员变量跟踪栈长度)
接口2:判空操作(利用长度成员判断)
接口3:进队操作(链表尾部插入,长度更新)
接口4:出队操作(队不空时,删除队头节点并释放空间,长度更新)
接口1:返回长度操作(设计类成员变量跟踪栈长度)
接口2:判空操作(利用长度成员判断)
接口3:进队操作(顺序表空间足够时数据域尾部插入,否则扩大空间再插入,长度更新)
接口4:出队操作(顺序表数据域不空时头部删除)
优先队列(带假排序的队列)
栈的典型应用队列数据结构设计(用链表)实际上就是堆(大顶堆或者小顶堆)了,每次出队的时候都是当前队里的极值也就是堆得根,进队的时候将元素插入到堆得尾部。
(堆涉及到二叉树的东西,所以现在没有详细介绍)
队列的典型应用
优先队列的典型应用
求出数组里前K个最大值(此题没有写博客)
顾把思路交给这了,虽然不完全一样,但是原理是一样的
// 求出前k个最大值 std::pair<int *,int> Array::KMaxOfArray(int * data,unsigned int const length,unsigned int K) { // 创建k+1规模的堆 int * pheap = new int[K+1]; for(unsigned int i = 0;i<K+1;i++) { pheap[i] = data[i]; } Heap<int>::Heap_make(pheap,K+1,Heap<int>::Heap_min); // 遍历整个数组,然后得到K+1个最大数 for(unsigned int i = K+1;i<length;i++ ) { pheap[0] = data[i]; Heap<int>::Heap_downcast(pheap,0,K+1,Heap<int>::Heap_min); } // 返回结果 return std::make_pair(pheap+1,K); }