盘县 网站建设成都高端模板建站

张小明 2026/3/2 21:45:15
盘县 网站建设,成都高端模板建站,长沙做网站优化的公司,自己的卡盟网站怎么做分站一、优先队列概念优先队列是一种特殊的队列#xff0c;元素出队顺序不是FIFO#xff0c;而是按照优先级#xff1a;每次出队的是优先级最高#xff08;或最低#xff09;的元素二、两种实现方式对比特性使用数组/链表#xff08;朴素实现#xff09;使用堆#xff08;推…一、优先队列概念优先队列是一种特殊的队列元素出队顺序不是FIFO而是按照优先级每次出队的是优先级最高或最低的元素二、两种实现方式对比特性使用数组/链表朴素实现使用堆推荐实现入队时间复杂度O(1)O(log n)出队获取最高优先级时间复杂度O(n)O(log n)查找最高优先级O(n)O(1)三、数组实现1. 数组无序实现#include stdio.h #include stdlib.h #include limits.h #define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int size; } PriorityQueueArray; // 初始化 void initPriorityQueueArray(PriorityQueueArray* pq) { pq-size 0; } // 入队 O(1) - 直接添加到尾部 void enqueueArray(PriorityQueueArray* pq, int value) { if (pq-size MAX_SIZE) { printf(队列已满\n); return; } pq-data[pq-size] value; } // 出队 O(n) - 需要遍历找到最大值 int dequeueArray(PriorityQueueArray* pq) { if (pq-size 0) { printf(队列为空\n); return INT_MIN; } // 找到最大值的索引 int maxIndex 0; for (int i 1; i pq-size; i) { if (pq-data[i] pq-data[maxIndex]) { maxIndex i; } } // 保存最大值 int maxValue pq-data[maxIndex]; // 用最后一个元素填补空缺 pq-data[maxIndex] pq-data[pq-size - 1]; pq-size--; return maxValue; } // 查看最高优先级 O(n) int peekArray(PriorityQueueArray* pq) { if (pq-size 0) return INT_MIN; int maxValue pq-data[0]; for (int i 1; i pq-size; i) { if (pq-data[i] maxValue) { maxValue pq-data[i]; } } return maxValue; } 2. 数组有序四、堆实现堆是一种特殊的完全二叉树满足最大堆父节点 ≥ 子节点最小堆父节点 ≤ 子节点1. 最大堆实现优先队列#include stdio.h #include stdlib.h #include limits.h #define MAX_HEAP_SIZE 100 typedef struct { int data[MAX_HEAP_SIZE]; int size; } MaxHeap; // 辅助函数交换两个元素 void swap(int* a, int* b) { int temp *a; *a *b; *b temp; } // 初始化堆 void initMaxHeap(MaxHeap* heap) { heap-size 0; } // 获取父节点索引 int parent(int i) { return (i - 1) / 2; } // 获取左孩子索引 int leftChild(int i) { return 2 * i 1; } // 获取右孩子索引 int rightChild(int i) { return 2 * i 2; } // 上浮操作维护堆性质O(log n) void heapifyUp(MaxHeap* heap, int index) { while (index 0 heap-data[parent(index)] heap-data[index]) { swap(heap-data[parent(index)], heap-data[index]); index parent(index); } } // 下沉操作维护堆性质O(log n) void heapifyDown(MaxHeap* heap, int index) { int maxIndex index; int left leftChild(index); int right rightChild(index); // 找到当前节点、左孩子、右孩子中的最大值 if (left heap-size heap-data[left] heap-data[maxIndex]) { maxIndex left; } if (right heap-size heap-data[right] heap-data[maxIndex]) { maxIndex right; } // 如果当前节点不是最大值交换并继续下沉 if (index ! maxIndex) { swap(heap-data[index], heap-data[maxIndex]); heapifyDown(heap, maxIndex); } } // 入队操作 O(log n) void heapEnqueue(MaxHeap* heap, int value) { if (heap-size MAX_HEAP_SIZE) { printf(堆已满\n); return; } // 1. 将新元素放到末尾 heap-data[heap-size] value; heap-size; // 2. 上浮调整 heapifyUp(heap, heap-size - 1); } // 出队操作 O(log n) int heapDequeue(MaxHeap* heap) { if (heap-size 0) { printf(堆为空\n); return INT_MIN; } // 1. 保存堆顶最大值 int maxValue heap-data[0]; // 2. 用最后一个元素替换堆顶 heap-data[0] heap-data[heap-size - 1]; heap-size--; // 3. 下沉调整 heapifyDown(heap, 0); return maxValue; } // 查看堆顶元素 O(1) int heapPeek(MaxHeap* heap) { if (heap-size 0) return INT_MIN; return heap-data[0]; } // 构建堆 O(n) - 弗洛伊德建堆法 void buildHeap(MaxHeap* heap, int arr[], int n) { // 复制数据 for (int i 0; i n; i) { heap-data[i] arr[i]; } heap-size n; // 从最后一个非叶子节点开始下沉 for (int i n / 2 - 1; i 0; i--) { heapifyDown(heap, i); } } // 打印堆树状结构 void printHeapTree(MaxHeap* heap, int index, int level) { if (index heap-size) return; // 先打印右子树 printHeapTree(heap, rightChild(index), level 1); // 打印当前节点 for (int i 0; i level; i) printf( ); printf(%d\n, heap-data[index]); // 打印左子树 printHeapTree(heap, leftChild(index), level 1); }2. 最小堆实现typedef struct { int data[MAX_HEAP_SIZE]; int size; } MinHeap; // 最小堆的上浮操作 void minHeapifyUp(MinHeap* heap, int index) { while (index 0 heap-data[parent(index)] heap-data[index]) { swap(heap-data[parent(index)], heap-data[index]); index parent(index); } } // 最小堆的下沉操作 void minHeapifyDown(MinHeap* heap, int index) { int minIndex index; int left leftChild(index); int right rightChild(index); if (left heap-size heap-data[left] heap-data[minIndex]) { minIndex left; } if (right heap-size heap-data[right] heap-data[minIndex]) { minIndex right; } if (index ! minIndex) { swap(heap-data[index], heap-data[minIndex]); minHeapifyDown(heap, minIndex); } }五、时间复杂度对比分析各种实现的时间复杂度操作无序数组/链表有序数组堆插入(入队)O(1)O(n)O(log n)删除最大(出队)O(n)O(1)O(log n)获取最大(查看)O(n)O(1)O(1)构建O(1)O(n log n)O(n)
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设公司的工资冠县建设局网站

这是一个非常重要且实际的问题。简单直接的答案是:对于在中国境内运营、达到相应级别的网络系统而言,“过等保”(即完成网络安全等级保护工作)不仅是“有必要”,而且是法定的强制性义务。 您可以将等保理解为网络世界…

张小明 2026/1/22 2:50:36 网站建设

北京网站建设报价表就有公司域名怎么建设网站

HuggingFace镜像网站推荐列表:国内高速下载Seed-Coder-8B-Base 在现代软件开发节奏日益加快的背景下,开发者对效率工具的要求已经从“辅助”转向“智能协同”。尤其是大模型技术的爆发式发展,让AI写代码不再是科幻场景——像GitHub Copilot这…

张小明 2026/1/22 2:50:05 网站建设

外贸网站设计的公司网站开发先找UI吗

毕业季的深夜,一位传播学硕士的屏幕正同时运行着八个窗口:知网检索页、杂乱的参考文献文件夹、漏洞百出的初稿、微信里导师“逻辑需加强”的批注、卡在98%的查重检测,以及一个永远在“对方正在输入…”的论文互助群。这不仅是技术层面的混乱&…

张小明 2026/1/22 2:49:34 网站建设

重庆网站建设推广网站规划与建设参考文献

Elsevier Tracker:学术投稿进度自动追踪神器终极指南 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 科研工作者在向Elsevier期刊投稿时,最令人困扰的莫过于反复登录系统查看审稿状态。Elsev…

张小明 2026/1/22 2:49:03 网站建设

大学毕业做网站插画师好吗怎么看网站的ftp

GRF框架:构建下一代因果机器学习系统的核心技术解析 【免费下载链接】grf Generalized Random Forests 项目地址: https://gitcode.com/gh_mirrors/gr/grf 在当今数据驱动的决策环境中,准确识别和量化因果效应已成为企业和研究机构的核心需求。G…

张小明 2026/1/22 2:48:32 网站建设

南宁网站定制开发做网站开发需要学哪些东西

一、迁移背景与价值​ webpack5 作为官方迭代的重要版本,相比 webpack4 带来了多项核心优化,包括但不限于:​构建性能提升:内置持久化缓存、模块联邦(Module Federation)、Tree Shaking 增强,平…

张小明 2026/1/22 2:48:01 网站建设