当前位置: 首页 > news >正文

html 学习网站昆明网站建设公司_

html 学习网站,昆明网站建设公司_,浏览器网页截图快捷键,取公司名称大全简单大气计算机中的堆数据结构 什么是堆 在计算机科学中,堆(Heap)是一种重要的数据结构,它用于在动态分配时存储和组织数据。堆是一块连续的内存区域,其中每个存储单元(通常是字节)都与另一个存储单元…

计算机中的堆数据结构

什么是堆

在计算机科学中,堆(Heap)是一种重要的数据结构,它用于在动态分配时存储和组织数据。堆是一块连续的内存区域,其中每个存储单元(通常是字节)都与另一个存储单元紧密相邻。

堆和栈是计算机内存的两种主要部分。其中,栈用于存储局部变量和函数调用的信息,而堆则用于存储动态分配的变量和数据结构。

堆的特点是可以动态地增加和减少内存,而且可以任意分配内存的大小。这意味着你可以在运行时分配内存,以存储例如动态数组,图形数据结构,优先级队列等数据。

堆的好处及适用场景

堆数据结构有许多优点,这使得它在许多计算场景中都非常有用。

  1. 动态内存分配:堆允许我们在运行时动态地分配和释放内存。这意味着我们可以在程序执行的过程中,根据需要创建或删除数据。
  2. 大小不定:与栈不同,堆的大小不是预先确定的。这意味着我们可以用它来存储大量的数据,只要可用的系统内存允许。
  3. 支持自定义数据类型:由于堆是通用的内存分配机制,因此可以用它来存储任何类型的数据,不仅仅是基本类型。

下面是一些适用的场景:

  • 动态数组:堆是创建动态数组(例如动态调整大小的数组)的理想场所。你可以在运行时根据需要增加或减少数组的大小。
  • 优先级队列:优先级队列经常使用堆来实现。在这种情况下,堆的特性允许我们有效地插入和删除元素,以及在O(1)时间内查找最大(或最小)元素。
  • 动态链接列表:在动态链接列表中,我们需要在运行时创建和删除节点。这也需要使用堆内存。
  • 图形和树结构:图形和树结构通常使用堆来实现,因为这些数据结构需要在运行时动态地添加和删除节点。

C++代码实现一个堆并测试

以下是一个简单的最小堆的C++实现。注意这个例子只是为了教育目的,并没有包含一些关键的功能,比如防止溢出或检查是否溢出。

然后,我们可以继续实现其他堆操作,例如删除元素,查找最小元素等。以下是一个更完整的堆实现,包括上述缺失的操作:

#include <iostream>  
#include <vector>  
#include <stdexcept>  // for std::out_of_range  class MinHeap {  
private:  std::vector<int> data;  // underlying data structure  int parent(int i) { return (i - 1) / 2; }  // parent index  int leftChild(int i) { return 2 * i + 1; }  // left child index  int rightChild(int i) { return 2 * i + 2; }  // right child index  void siftUp(int i) {  // sift element i up to its proper place  while (i > 0 && data[parent(i)] > data[i]) {  std::swap(data[parent(i)], data[i]);  i = parent(i);  }  }  void siftDown(int i) {  // sift element i down to its proper place  int minIndex = i;  // index of current minimum element  int l = leftChild(i);  // left child index  if (l < data.size() && data[l] < data[minIndex]) {  minIndex = l;  }  int r = rightChild(i);  // right child index  if (r < data.size() && data[r] < data[minIndex]) {  minIndex = r;  }  if (i != minIndex) {  // swap i and minIndex if necessary and repeat siftDown on affected subtree  std::swap(data[i], data[minIndex]);  siftDown(minIndex);  }  }  void siftUpForInsert(int i) {  // sift element i up to its proper place after insert for heap property to be maintained  while (i > 0 && data[parent(i)] > data[i]) {  std::swap(data[parent(i)], data[i]);  i = parent(i);  }  }  public:  void insert(int value) {  // insert value into heap and maintain heap order property  data.push_back(value);  // append value to the end of the vector and remember its index (size - 1)  siftUpForInsert(data.size() - 1);  // sift up to maintain heap order property (parent is larger than its children) after insert  }  int extractMin() {  // extract the current minimum element from heap and maintain heap order property  if (data.empty()) { throw std::out_of_range("Heap is empty"); }  // heap is empty, so there is no min element throw an exception here to indicate that the situation cannot be handled and the program should stop execution with an error message to user indicating the error situation that occurred here.  int minElement = data[0];  // store the minimum element in a temporary variable minElement before swapping it with the last element in the vector and deleting it from the vector in the next step (data.pop_back()) as this will change the size of the vector and all further indices will shift downwards by one position in memory.  std::swap(data[0], data[data.size() - 1]);  // swap the first element with the last element in the vector as they will have swapped roles after this step (the last element will become the new first element/minimum element in its new position in memory while the first element will become the last element in its new position in memory after this swap operation) for maintaining the heap property after extract operation.  data.pop_back();  // remove the last element from the vector as it has just become unnecessary/redundant/no longer required in memory after the previous swapping step to maintain heap order property as required. As it is removed, all further indices will shift downwards by one position in memory for maintaining the heap property after extract operation.  siftDown(0);  // sift down the new first element/minimum element to maintain heap order property after extract operation as required. The root/first element is always at index 0 in a heap as shown in all figures above for heap data structure shown above in this code segment also. Heap is a complete binary tree (each node has either two children or no children). Binary tree is a type of tree where each node has}
http://www.laogonggong.com/news/80364.html

相关文章:

  • 湖南的商城网站建设网站优化吧
  • 商丘市建立网站公司丰台企业网站建设
  • 怎么对网站上的游记做数据分析苏州网站建设 牛
  • 做网站用php还是node游戏平台网站开发
  • 网站优化策略小白做电商从什么做起
  • 网站建设一般涉及后台功能企业咨询管理公司简介
  • 网站建设跟前端有什么区别建设网站如何赚钱
  • 中药材天地网做中药零售网站产品营销推广策略
  • 北京营销型网站建设公司新手怎么优化网站
  • 昆明手机网站建设青岛seo
  • 网站上传图片尺寸百度风云榜各年度小说排行榜
  • 做移动类网站的书推荐网站建设经费预算计划
  • 做网站规避什么注册个人工作室流程及费用
  • 郑州做网站公司东莞最新确诊病例在哪里
  • 做外贸的要有自己的网站吗百度系app有哪些
  • 怎样做读书会网站作品集展示的网站
  • 大连网龙建站优化推广湛江网站建设方案维护
  • 晋中住房与城乡建设厅网站网站开发服务费计入哪个科目
  • 医院网站建设多少钱做营销网站企业
  • 西部数码网站开发管理助手软件定制研发
  • 做相册网站logoWordPress网盘下载插件
  • 怎么接单做网站互联网营销行业前景
  • 济宁做网站公司找融合做的丑的网站有哪些知乎
  • 西安网站建设制作熊掌号昆明市网站建设公司
  • 做债的网站云南网站建设公司前十名
  • 网站架构设计文档linode vps wordpress插件不运行
  • 西宁市城北区建设网站全球互联网企业排名
  • 宁波外贸网站制作公司公司网站怎么维护
  • 国内网站建设公司top20苏州企业网站建设公司只选亿企邦
  • 傻瓜式网站模板为什么做网站要用谷歌浏览器