- 浏览: 2949121 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (2529)
- finance (1459)
- technology (218)
- life (343)
- play (150)
- technology-component (0)
- idea (6)
- house (74)
- health (75)
- work (32)
- joke (23)
- blog (1)
- amazing (13)
- important (22)
- study (13)
- Alternative (0)
- funny (8)
- stock_technology (12)
- business (16)
- car (21)
- decorate (4)
- basketball (2)
- English (16)
- banker (1)
- TheBest (1)
- sample (2)
- love (13)
- management (4)
最新评论
-
zhongmin2012:
BSM确实需要实践,标准ITIL服务流程支持,要做好,需要花费 ...
BSM实施之前做什么 -
shw340518:
提示楼主,有时间逻辑bug:是你妈二十那年写的 那会儿连你爹都 ...
80后辣妈给未来儿子的信~我的儿,你也给我记住了~~~ -
guoapeng:
有相关的文档吗?
it项目管理表格(包含146个DOC文档模板) -
solomon:
看到的都是 这种 CTRL+C 和 CTRL+V 的文章, ...
Designing a website with InfoGlue components -
wendal:
恩, 不错. 有参考价值
Designing a website with InfoGlue components
数据结构堆的向量实现 /**//********************************************************************* Title:C++数据结构堆 Author:Zhen.liang CopyRight:Diyinside Community CSTC 包括最小堆和最大堆两部分组成 *********************************************************************/ /**//* for example: #include <iostream> #include "Heap.h" using namespace std; int main(){ DiyinsideHeap::MaxHeap<char> cdata(30); cdata.Insert('3'); cdata.Insert('e'); cdata.Insert('k'); cout<<"Demo MinHeap"<<endl; while(!cdata.IsEmpty()){ cout<<cdata.RemoveMin()<<endl; } return 0; } */ #include <vector> #include <assert.h> using namespace std; namespace DiyinsideHeap...{ //最小堆 template<class Type> class MinHeap...{ public: //构造函数空堆 MinHeap(int maxsize = 10)...{ assert(maxsize>=0);//限制输入大小为正 MaxHeapSize = maxsize;//堆大小 CurrentSize = 0;//当前存放大小 data.resize(MaxHeapSize);//存储空间设置 } //析构函数 ~MinHeap()...{ data.clear(); } int HeapSize()const;//获得Heap大小 int Insert(const Type&);//插入元素 Type RemoveMin();//删除最小的元素 int IsEmpty()const;//判断是否空 int IsFull()const;//判断是否满 int MakeEmpty();//置空 private: vector<Type> data;//存储数组 int CurrentSize;//当前存放个数 int MaxHeapSize;//最大存放个数 int FilterDown(int,int);//向下调整 int FilterUp(int);//向上调整 }; template<class Type> int MinHeap<Type>::HeapSize()const...{ return CurrentSize; } template<class Type> int MinHeap<Type>::MakeEmpty()...{ CurrentSize = 0; return 1; } template<class Type> Type MinHeap<Type>::RemoveMin()...{ if(!CurrentSize)...{ return -1; } else...{ Type temp = data[0]; data[0] = data[CurrentSize-1]; CurrentSize--; FilterDown(0,CurrentSize-1); return temp; } } template<class Type> int MinHeap<Type>::IsFull()const...{ if(CurrentSize == MaxHeapSize)...{ return 1; } else...{ return 0; } } template<class Type> int MinHeap<Type>::Insert(const Type& Data)...{ if(CurrentSize == MaxHeapSize)...{ return -1; } else...{ data[CurrentSize] = Data; FilterUp(CurrentSize++); return 1; } } template<class Type> int MinHeap<Type>::FilterUp(int start)...{ int j = start ; int i = (j-1)/2; Type temp = data[j]; while(j>0)...{ if(data[i]<=temp)...{ break; } else...{ data[j] = data[i]; j = i; i = (i - 1)/2; } } data[j] = temp; return 1; } template<class Type> int MinHeap<Type>::FilterDown(int start,int end)...{ int i = start ; int j = 2*i + 1; Type temp = data[i]; while(j<=end)...{ if((j<end) && (data[j]>data[j+1]))...{ j++; } if(temp<=data[j])...{ break; } else...{ data[i] = data[j]; i = j; j = 2*j + 1; } } data[i] = temp; return 1; } template<class Type> int MinHeap<Type>::IsEmpty()const...{ if(CurrentSize)...{ return 0; } else...{ return -1; } } //最大堆 template<class Type> class MaxHeap...{ public: //构造函数空堆 MaxHeap(int maxsize = 10)...{ assert(maxsize>=0); MaxHeapSize = maxsize; CurrentSize = 0; data.resize(MaxHeapSize); } //析构函数 ~MaxHeap()...{ data.clear(); } int HeapSize()const;//获得Heap大小 int Insert(const Type&);//插入元素 Type RemoveMin();//删除最小的元素 int IsEmpty()const;//判断是否空 int IsFull()const;//判断是否满 int MakeEmpty();//置空 private: vector<Type> data;//存储数组 int CurrentSize;//当前存放个数 int MaxHeapSize;//最大存放个数 int FilterDown(int,int);//向下调整 int FilterUp(int);//向上调整 }; template<class Type> int MaxHeap<Type>::HeapSize()const...{ return CurrentSize; } template<class Type> int MaxHeap<Type>::MakeEmpty()...{ CurrentSize = 0; return 1; } template<class Type> Type MaxHeap<Type>::RemoveMin()...{ if(!CurrentSize)...{ return -1; } else...{ Type temp = data[0]; data[0] = data[CurrentSize-1]; CurrentSize--; FilterDown(0,CurrentSize-1); return temp; } } template<class Type> int MaxHeap<Type>::IsFull()const...{ if(CurrentSize == MaxHeapSize)...{ return 1; } else...{ return 0; } } template<class Type> int MaxHeap<Type>::Insert(const Type& Data)...{ if(CurrentSize == MaxHeapSize)...{ return -1; } else...{ data[CurrentSize] = Data; FilterUp(CurrentSize++); return 1; } } template<class Type> int MaxHeap<Type>::FilterUp(int start)...{ int j = start ; int i = (j-2)/2; Type temp = data[j]; while(j>0)...{ if(data[i]>=temp)...{ break; } else...{ data[j] = data[i]; j = i; i = (i - 2)/2; } } data[j] = temp; return 1; } template<class Type> int MaxHeap<Type>::FilterDown(int start,int end)...{ int i = start ; int j = 2*i + 1; Type temp = data[i]; while(j<=end)...{ if((j<end) && (data[j]<data[j+1]))...{ j++; } if(temp>=data[j])...{ break; } else...{ data[i] = data[j]; i = j; j = 2*j + 1; } } data[i] = temp; return 1; } template<class Type> int MaxHeap<Type>::IsEmpty()const...{ if(CurrentSize)...{ return 0; } else...{ return -1; } } } pku1442 #include <stdio.h> #include <memory.h> #include <queue> using namespace std; const int MAXN=30005; struct TMax { TMax(int tx):x(tx) {} int x; }; struct TMin { TMin(int tx):x(tx) {} int x; }; int d[MAXN],g[MAXN]; int n,m; priority_queue<TMax> hmax; priority_queue<TMin> hmin; bool operator<(const TMax &a,const TMax &b) { return a.x<b.x; } bool operator<(const TMin &a,const TMin &b) { return a.x>b.x; } void Read() { memset(d,0,sizeof(d)); memset(g,0,sizeof(g)); scanf("%d%d",&n,&m); int i; for (i=1;i<=n;i++) scanf("%d",&d[i]); for (i=1;i<=m;i++) scanf("%d",&g[i]); } void Work() { int i,j=1; for (i=1;i<=n;i++) { if (!hmax.empty()&&d[i]<hmax.top().x) { hmin.push(TMin(hmax.top().x)); hmax.pop(); hmax.push(TMax(d[i])); } else hmin.push(TMin(d[i])); while (j<=m&&g[j]==i) { printf("%d\n",hmin.top().x); hmax.push(TMax(hmin.top().x)); hmin.pop(); j++; } } } int main() { //freopen("in.txt","r",stdin); Read(); Work(); return 1; } 用堆实现优先队列 #include<stdio.h> typedef struct { int Object_ID; int Priority; }HEAP; void siftdown(HEAP* a,int i,int n) { //adjust the factors' order int j; HEAP t; t=a[i]; while((j=2*i+1)<n) { if(j<n-1&&a[j].Priority<a[j+1].Priority) j++; if(t.Priority<a[j].Priority) { a[i]=a[j]; i=j; } else break; } a[i]=t; } void heap_sort(HEAP* a,int n) {//put the factors in hesp for each time and sort them for each time int i; HEAP t; for(i=(n-2)/2;i>=0;i--) siftdown(a,i,n); for(i=n-1;i>0;i--) { t=a[0]; a[0]=a[i]; a[i]=t; siftdown(a,0,i); } } void changeweight(HEAP* a,int& num,int Object_ID, int new_priority) { for(int i=0;i<num;i++) if(a[i].Object_ID==Object_ID) break; if(i==num) printf("No such Object_ID!\n"); a[i].Priority=new_priority; heap_sort(a,num); } void dequeue(HEAP* a,int& num,int& Object_ID) { Object_ID=a[0].Object_ID; for(int i=0;i<num-1;i++) a[i]=a[i+1]; num--; heap_sort(a,num); } void enqueue(HEAP* a,int &num,int Object_ID, int priority) { a[num].Object_ID=Object_ID; a[num++].Priority=priority; } bool isLeaf(HEAP *h,int& num,int i) { if(i>num/2) return true; return false; } int leftChild(HEAP *h,int& num,int i) { if(2*i>num) return -1; //the node has not a left child return 2*i; } void main() { int Object_ID,Priority; HEAP h[50]; int num; num=0; while(Object_ID) { scanf("%d%d",&Object_ID,&Priority); if(!Object_ID) break; enqueue(h,num,Object_ID,Priority); } heap_sort(h,num); for(int i=0;i<num;i++) printf("%d\t%d\n",h[i].Object_ID,h[i].Priority); }
发表评论
-
New Enterprise Security Solutions
2011-09-13 15:46 0<!-- [if !mso]> <styl ... -
ES Announces Enterprise Security Solutions
2011-09-13 15:40 0<!-- [if !mso]> <styl ... -
linux下如何将文件打包、压缩并分割成制定大小?
2010-09-15 18:52 3310将大文件或目录打包、 ... -
rhel4 yum安装, 使用
2010-09-07 16:37 0第一种方法: yum源来自chinalinuxpub.com ... -
Windows: 远程自动安装程序
2010-08-26 15:48 1083问题的提出 作为 ... -
Oracle体系结构
2010-08-07 09:53 1021Oracle体系结构 Oracle Server包括Oracl ... -
ocp sesson 3
2010-07-31 14:39 0show parameter undo 只有 默认情况下服务 ... -
ocp session 2
2010-07-25 17:00 0/home/oracle/raInventory/orains ... -
ocp session 1
2010-07-24 13:02 0ocp first lesson D:\oracle_cou ... -
Python的xmlrpc调试
2010-07-19 23:55 2107Python的xmlrpc 调 试 ----------- ... -
mdadm使用详解及RAID 5简单分析
2010-07-11 16:19 1390http://blog.csdn.net/chinalinux ... -
Linux的lvm的基本配置步骤
2010-07-11 14:53 12831.增加硬件 增加的ide硬盘前缀为hd,scs ... -
OCP study material
2010-07-11 13:52 0\\192.168.1.105watch -n 1 'stat ... -
apache+python+mod_python+django 编译安装指南
2010-06-24 17:25 14691、本文将知道你在 linux 下使用源码包安装 ... -
在ubuntu下配置apache运行python脚本
2010-06-22 16:11 2269常用的简单命令 sudo apt ... -
Python 2.5 Quick Reference
2010-06-21 11:18 1463... -
shell 面试题汇集
2010-06-10 19:50 1043利用 top 取某个进程的 CPU 的脚本 : ... -
shell程序面试题
2010-06-10 19:48 29001.要求分析Apache访问日志,找出里面数量在前面100位的 ... -
EMC技术支持工程师笔试部分试题回忆
2010-06-07 15:16 1648要查看更多EMC公司笔经相关信息,请访问EMC公司校园招聘CL ... -
linux shell 条件语句
2010-06-03 23:29 1777...
相关推荐
堆是一种特殊的数据结构,它常被用于实现优先队列。在优先队列中,待删除的元素是优先级最高(或最低)的那个。堆结构允许在任何时间插入任意优先级的元素到队列中去。在计算机科学中,堆被定义为一棵每一个节点的...
在数据结构的课程中,R语言可以用来实现和可视化数据结构,例如创建自定义数据类型,操作向量、矩阵和列表,或者使用数据框和因子来处理表格数据。R语言的包(如data.table、dplyr和tidyverse)提供了丰富的工具,...
这个压缩包"**C++各种数据结构头文件,可以直接调用(含样例实现).rar**"包含了C++实现的各种常见数据结构的头文件,方便开发者直接引用,同时也为学习者提供了实际的代码示例,帮助理解数据结构的工作原理。...
用函数实现堆排序,并输出每趟排序的结果 Input 第一行:键盘输入待排序关键的个数n 第二行:输入n个待排序关键字,用空格分隔数据 Output 第一行:初始建堆后的结果 其后各行输出交换堆顶元素并调整堆的结果,数据...
其次,《数据结构与算法》可能更加专注于数据结构的实践应用,它可能会介绍如何在实际编程中创建和操作这些数据结构,包括如何在内存中布局数据,以及如何通过C++或Java等高级语言实现。这本书可能会提供丰富的实例...
在C++编程语言中,数据结构的实现通常利用其强大的面向对象特性以及模板机制来达到高度的灵活性和复用性。下面将详细讨论在C++中实现数据结构的一些关键知识点。 1. **链表**: 链表是一种非连续存储的数据结构,...
C++支持STL(标准模板库),其中包含了一些预定义的数据结构如向量、列表、集合、映射等,以及高效的算法,使得开发者能够更方便地使用数据结构。 JAVA版的《数据结构》则可能强调Java平台特有的数据结构实现,如...
这些数据结构是构建复杂算法的基础,例如排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序)、搜索算法(如深度优先搜索和广度优先搜索)等。 数组是最基础的数据结构,它提供了一种在内存中...
在“数据结构与算法课程设计-基于Rust的数据结构与算法实现”项目中,我们可以深入探讨Rust编程语言如何被用来高效地实现各种经典数据结构和算法。Rust是一种系统级编程语言,以其内存安全、并发性和高性能而受到...
C++的模板机制使得代码可以高度通用,同时STL(Standard Template Library)提供了包括向量、链表、集合、映射等现成的数据结构,为开发者提供了便利。 殷人昆教授的代码可能包括了以下常见的数据结构: 1. **数组...
堆是一种可以快速找到最大或最小元素的数据结构,常用于实现优先队列。散列和位图则提供了快速的查找和存储机制,尤其适用于大量数据的处理。 通过这七章的学习,读者不仅能理解各种数据结构的原理,还能掌握C++...
算法:C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版) 本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章。第一部分“基础知识”(第1—2章)介绍基本算法分析原理。...
堆是一种特殊的树形数据结构,满足堆属性(父节点的值大于或小于其子节点),通常用于优先队列的实现。哈希表利用哈希函数快速定位元素,提供常数时间的查找、插入和删除操作,但可能会有哈希冲突问题,需要通过链...
数据结构的实现通常涉及指针的使用,C语言提供了底层的内存管理,能直接操作内存,因此是实现数据结构的理想选择。例如,通过指针实现链表的节点链接,用数组模拟堆栈和队列,利用位运算实现位向量等。 李春葆教授...
此外,还有堆数据结构,分为最大堆和最小堆,它们满足父节点的值大于或等于(最大堆)或小于或等于(最小堆)其子节点的值,常用于优先级队列的实现。 图数据结构由节点(顶点)和边组成,可以表示复杂的网络关系。...
- **堆**:堆是一种特殊的树形数据结构,通常用于优先队列的实现,分为最大堆和最小堆。 5. **图**:图是由顶点和边构成的数据结构,用于表示对象之间的关系。源代码可能包含了图的邻接矩阵和邻接表两种存储方式,...
7. **堆**:堆是一种特殊的树形数据结构,满足堆属性(最大堆或最小堆),常用于优先队列的实现。 8. **堆排序和优先队列**:堆排序利用堆的特性进行排序,而优先队列是基于堆的数据结构,能实现快速的查找最大或...
在数据结构中,位运算常用于高效地处理和存储数据,例如在位向量中表示集合或在位操作中优化空间利用率。 十一、排序与查找 排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等,都是数据结构...