【PTA數據結構 | C語言版】多叉堆的上下調整

本專欄持續輸出數據結構題目集,歡迎訂閱。

文章目錄

    • 題目
    • 代碼

題目

請編寫程序,將 n 個已經滿足 d 叉最小堆順序約束的數據直接讀入最小堆;隨后將下一個讀入的數據 x 插入堆;再執行刪頂操作并輸出刪頂的元素;最后順次輸出堆中剩余元素以檢驗操作的正確性。

輸入格式:
輸入在第 1 行給出 2 個正整數 c(2<c≤1000)和 d(1<d≤4),依次對應最小堆的最大容量和樹的度;下一行給出正整數 n(<c);隨后一行按層序遍歷的順序給出 n 個最小堆元素;最后一行給出將要插入堆的元素 x。所有堆元素均為 int 型范圍內的整數。

輸出格式:
在一行中輸出插入后再刪頂的元素,格式為 min = y,其中 y 為刪頂元素值。
隨后 n 行,按層序遍歷的順序每行輸出一個最小堆元素。

輸入樣例:
10 3
9
1 3 4 6 7 10 8 5 9
2

輸出樣例:
min = 1
2
3
4
6
7
10
8
5
9

代碼

#include <stdio.h>
#include <stdlib.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}// 向上調整,維護d叉最小堆性質
void siftUp(int arr[], int n, int d, int i) {while (i > 0) {int parent = (i - 1) / d;if (arr[i] >= arr[parent]) break;swap(&arr[i], &arr[parent]);i = parent;}
}// 向下調整,維護d叉最小堆性質
void siftDown(int arr[], int n, int d, int i) {while (1) {int smallest = i;int startChild = d * i + 1;int endChild = startChild + d;for (int j = startChild; j < endChild && j < n; j++) {if (arr[j] < arr[smallest]) {smallest = j;}}if (smallest == i) break;swap(&arr[i], &arr[smallest]);i = smallest;}
}int main() {int c, d, n;scanf("%d %d", &c, &d);scanf("%d", &n);int *heap = (int *)malloc(c * sizeof(int));if (heap == NULL) {fprintf(stderr, "內存分配失敗\n");return 1;}for (int i = 0; i < n; i++) {scanf("%d", &heap[i]);}int x;scanf("%d", &x);// 插入新元素heap[n] = x;siftUp(heap, n + 1, d, n);n++;// 刪頂操作int min = heap[0];heap[0] = heap[n - 1];n--;siftDown(heap, n, d, 0);// 輸出結果printf("min = %d\n", min);for (int i = 0; i < n; i++) {printf("%d\n", heap[i]);}return 0;
}    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89584.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

selenium后續!!

小項目案例:實現批量下載網頁中的資源根據15.3.2小節中的返回網頁內容可知,用戶只有獲取了網頁中的圖片url才可以將圖片下載到*在使用selenium庫渲染網頁后,可直接通過正則表達式過濾出指定的網頁圖片&#xff0c;從而實現批量下載接下來以此為思路來實現一個小項目案例。項目任…

深度解析Linux文件I/O三級緩沖體系:用戶緩沖區→標準I/O→內核頁緩存

在Linux文件I/O操作中&#xff0c;緩沖區的管理是一個核心概念&#xff0c;主要涉及用戶空間緩沖區和內核空間緩沖區。理解這兩者的區別和工作原理對于高效的文件操作至關重要。 目錄 一、什么是緩沖區 二、為什么要引入緩沖區機制 三、三級緩沖體系 1、三級緩沖體系全景圖…

【每日算法】專題十三_隊列 + 寬搜(bfs)

1. 算法思路 BFS 算法核心思路 BFS&#xff08;廣度優先搜索&#xff09;使用 隊列&#xff08;Queue&#xff09;按層級順序遍歷圖或樹的節點。以下是 C 實現的核心思路和代碼模板&#xff1a; 算法框架 #include <queue> #include <vector> #include <un…

【動手實驗】發送接收窗口對 TCP傳輸性能的影響

環境準備 服務器信息 兩臺騰訊云機器 t04&#xff08;172.19.0.4&#xff09;、t11&#xff08;172.19.0.11&#xff09;&#xff0c;系統為 Ubuntu 22.04&#xff0c;內核為 5.15.0-139-generic。默認 RT 在 0.16s 左右。 $ ping 172.19.0.4 PING 172.19.0.4 (172.19.0.4) …

28、鴻蒙Harmony Next開發:不依賴UI組件的全局氣泡提示 (openPopup)和不依賴UI組件的全局菜單 (openMenu)、Toast

目錄 不依賴UI組件的全局氣泡提示 (openPopup) 彈出氣泡 創建ComponentContent 綁定組件信息 設置彈出氣泡樣式 更新氣泡樣式 關閉氣泡 在HAR包中使用全局氣泡提示 不依賴UI組件的全局菜單 (openMenu) 彈出菜單 創建ComponentContent 綁定組件信息 設置彈出菜單樣…

讓老舊醫療設備“聽懂”新語言:CAN轉EtherCAT的醫療行業應用

在醫療影像設備的智能化升級中&#xff0c;通信協議的兼容性常成為工程師的“痛點”。例如&#xff0c;某醫院的移動式X射線機采用CAN協議控制機械臂&#xff0c;而主控系統基于EtherCAT架構。兩者協議差異導致數據延遲高達5ms&#xff0c;影像定位精度下降&#xff0c;甚至影響…

ubuntu基礎搭建

ubuntu上docker的搭建 https://vulhub.org/zh 網站最下面找到開始使用&#xff0c;有搭建的命令//安裝docker&#xff0c;連接失敗多試幾次 curl -fsSL https://get.docker.com | sh //驗證Docker是否正確安裝&#xff1a; docker version //還要驗證Docker Compose是否可用&am…

動態規劃 + DFS + 記憶化!Swift 解 LeetCode 329 的實戰筆記

文章目錄摘要描述題解答案題解代碼分析代碼解析示例測試及結果時間復雜度空間復雜度總結摘要 這篇文章帶你用 Swift 實戰一道非常經典的 DFS 記憶化搜索題目 —— LeetCode 329《矩陣中的最長遞增路徑》。看似一個簡單的“走格子”游戲&#xff0c;實則考察了搜索順序、剪枝策…

046_局部內部類與匿名內部類

一、局部內部類&#xff08;Local Inner Class&#xff09; 1.1 定義與基本概念 局部內部類是定義在方法、構造器或代碼塊內部的類&#xff0c;其作用域僅限于所在的局部范圍&#xff08;定義它的方法、構造器或代碼塊&#xff09;&#xff0c;超出該范圍則無法訪問。 它的核心…

Jenkins Pipeline 中使用 JsonSlurper 報錯:cannot find current thread

Jenkins Pipeline 中使用 JsonSlurper 報錯&#xff1a;cannot find current thread&#x1f31f; 背景? 問題重現&#x1f9e0; 原因解析&#xff1a;CPS 與非 CPS 安全方法沖突? 解決方案一&#xff1a;使用 NonCPS 注解&#xff08;經典方案&#xff09;? 解決方案二&…

Go 語言循環語句詳解

Go 語言循環語句詳解 在編程語言中&#xff0c;循環語句是實現重復執行某些代碼塊的關鍵元素。Go 語言作為現代編程語言之一&#xff0c;提供了多種循環結構來滿足不同的編程需求。本文將詳細講解 Go 語言中的循環語句&#xff0c;包括 for、while 和 goto 語句&#xff0c;幫助…

day30——零基礎學嵌入式之進程間通信1.0

一、進程間通信7種方式1.傳統的進程間通信方式&#xff08;1&#xff09;管道①無名管道&#xff1a;②有名管道&#xff1a;&#xff08;2&#xff09;③信號&#xff08;3&#xff09;system Ⅴ 》系統Ⅴ 進程間通信方式 inner Process Comunication④共享內存 &#xff…

408考研逐題詳解:2010年第33題——網絡體系結構

2010年第33題 下列選項中&#xff0c;不屬于網絡體系結構所描述的內容是&#xff08; &#xff09; A. 網絡的層次 \qquad B. 每層使用的協議 \qquad C. 協議的內部實現細節 \qquad D. 每層必須完成的功能 解析 本題屬于計算機網絡基礎知識的范疇&#xff0c;考查網絡體系結構…

VR 遠程系統的沉浸式協作體驗?

在傳統的遠程協作中&#xff0c;團隊成員往往通過二維的視頻畫面進行交流&#xff0c;這種方式雖然能實現基本的溝通&#xff0c;但缺乏真實感和互動性。而 VR 遠程系統的出現&#xff0c;徹底改變了這一局面。戴上 VR 設備&#xff0c;員工們仿佛置身于同一個真實的辦公室空間…

記錄DataGrip 2025.1.3破解失敗后,無法重啟問題修復

記錄DataGrip 2025.1.3破解失敗后&#xff0c;無法重啟問題修復安裝過程復盤異常場景解決方式總結安裝過程 在官網下載了最新版本2025.1.3。安裝成功后&#xff0c;使用30天試用方式&#xff0c;打開datagrip。 復盤異常場景 網上搜索破解教程進行破解。找了一個需要現在ja…

私有服務器AI智能體搭建配置選擇記錄

在搭建私有服務器上的AI智能體時&#xff0c;需要從多個方面進行選擇和規劃&#xff0c;以確保系統性能、安全性、可擴展性等方面滿足需求。1. 硬件選擇 服務器配置&#xff1a; CPU&#xff1a;選擇高性能多核CPU&#xff08;如Intel Xeon或AMD EPYC系列&#xff09;&#xff…

SDC Specical check setting的描述 - false path

在上一篇文中描述了SDC的基本語法&#xff0c;其中關于時序異常約束并沒有進行詳細的描述&#xff0c;但是在正常的設計中&#xff0c;一般這種異常的設置反而是需要特別關注的&#xff0c;主要包括&#xff1a;1. 虛假路徑- false path不需要滿足任何時序要求的路徑&#xff1…

【Python練習】048. 編寫一個函數,實現簡單的命令行接口,接受用戶輸入并響應

048. 編寫一個函數,實現簡單的命令行接口,接受用戶輸入并響應 在 Python 中,可以通過 input() 函數創建一個簡單的命令行接口,接受用戶輸入并根據輸入內容進行響應。 示例代碼 def simple_command_line_interface():"""實現一個簡單的命令行接口,接受用…

軟件工廠語境下的知識系統選型:兼顧合規性與集成深度

在過去幾十年間&#xff0c;制造業從“工匠手作”邁向“工業流水線”&#xff0c;完成了生產效率的巨大飛躍。當軟件開發也面臨交付復雜性、合規要求與協作成本不斷上升的現實&#xff0c;“軟件工廠”的理念逐步興起。 在這場“開發現代化”的轉型中&#xff0c;知識管理被重新…

C語言-一維數組,二維數組

數組 數組的引入如果要在程序中保存一個人的年齡&#xff1f;如何保存&#xff1f; 答&#xff1a;創建一個基于int類型的變量&#xff0c;舉例&#xff1a;int age 22如果要在程序中保存一個人的三門課的成績&#xff1f;如何保存&#xff1f; 答&#xff1a;創建三個基于flo…