C程式範例,示範可變長度陣列的用法
假設我們負責建立一個圖書館系統,用於監控和查詢圖書館的各種操作。現在我們被要求實作三個不同的指令,分別執行以下動作:
使用指令1,我們可以記錄在書架x上插入一本有y頁的書。
使用指令2,我們可以列印出書架x上第y本書的頁碼。
使用指令3,我們可以列印出書架x上的書的數量。
這些指令以2D陣列的形式給出,格式為{指令類型,x,y}。如果沒有y值,則預設值為0。我們列印給定命令的結果。
因此,如果輸入如下:書架數量=4,查詢數量=4,輸入陣列= {{1,3,23},{1,4,128},{2,3,0}, {3,4,0}};那麼輸出將是
23 1
Command 1 inserts a book with 23 pages on shelf 3. Command 2 inserts a book with 128 pages on shelf 4. Command 3 prints the page number of book 0 on shelf 3. Command 4 prints the number of books on shelf 3.
為了解決這個問題,我們將按照以下步驟進行:
- b := 大小為s的新數組
- p := 大小為s的新陣列
- 初始化i := 0,當i < s 時,更新(增加i 1),執行下列動作:
- b[i] := 0
- p[i] := 新陣列
- 初始化loopCount := 0,當loopCount < q 時,更新(增加loopCount 1),執行下列動作−
- qtype := q_array[loopCount, 0]
- 若qtype 與1 相同,則−
- x := q_array[loopCount, 1]
- y := q_array[loopCount, 2]
- b[x] := b[x] 1
- p[x] := 釋放p[x ] 所指向的物件並傳回大小為
- b[x]
- p[x, b[x] - 1] = y
##否則,當qtype 與2 相同,則− - x := q_array[loopCount, 1]y := q_array[loopCount, 2]列印p[x, y]
否則- x := q_array[loopCount, 1]列印b[x]
如果b 不為空,則− - 釋放b 所取得的記憶體
初始化i := 0,當i < s 時,更新(增加i 1),執行下列運算−- 若p[i] 不為空,則−
- 釋放p[i] 所取得的記憶體
如果p 不為空,則−- 釋放p 所取得的記憶體
#include <stdio.h> #include <stdlib.h> void solve(int s, int q, int q_array[][3]) { int* b; int** p; b = (int*)malloc(sizeof(int)*s); p = (int**)malloc(sizeof(int*)*s); for(int i = 0; i < s; i++) { b[i] = 0; p[i] = (int*)malloc(sizeof(int)); } int loopCount; for(loopCount = 0; loopCount < q; loopCount++) { int qtype; qtype = q_array[loopCount][0]; if (qtype == 1) { int x, y; x = q_array[loopCount][1]; y = q_array[loopCount][2]; b[x] += 1; p[x] = realloc(p[x], b[x]*sizeof(int)); p[x][b[x] - 1] = y; } else if (qtype == 2) { int x, y; x = q_array[loopCount][1]; y = q_array[loopCount][2]; printf("%d</p><p>", p[x][y]); } else { int x; x = q_array[loopCount][1]; printf("%d</p><p>", b[x]); } } if (b) free(b); for (int i = 0; i < s; i++) if (p[i]) free(p[i]); if (p) free(p); } int main() { int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; solve(4, 4, input_arr); }
int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}};
solve(4, 4, input_arr);
登入後複製
輸出int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; solve(4, 4, input_arr);
23
1
登入後複製登入後複製
23 1
以上是C程式範例,示範可變長度陣列的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

C語言數據結構:樹和圖的數據表示與操作樹是一個層次結構的數據結構由節點組成,每個節點包含一個數據元素和指向其子節點的指針二叉樹是一種特殊類型的樹,其中每個節點最多有兩個子節點數據表示structTreeNode{intdata;structTreeNode*left;structTreeNode*right;};操作創建樹遍歷樹(先序、中序、後序)搜索樹插入節點刪除節點圖是一個集合的數據結構,其中的元素是頂點,它們通過邊連接在一起邊可以是帶權或無權的數據表示鄰

文件操作難題的真相:文件打開失敗:權限不足、路徑錯誤、文件被佔用。數據寫入失敗:緩衝區已滿、文件不可寫、磁盤空間不足。其他常見問題:文件遍歷緩慢、文本文件編碼不正確、二進製文件讀取錯誤。

文章討論了在C中有效使用RVALUE參考,以進行移動語義,完美的轉發和資源管理,重點介紹最佳實踐和性能改進。(159個字符)

C 20範圍通過表現力,合成性和效率增強數據操作。它們簡化了複雜的轉換並集成到現有代碼庫中,以提高性能和可維護性。

C語言函數是代碼模塊化和程序搭建的基礎。它們由聲明(函數頭)和定義(函數體)組成。 C語言默認使用值傳遞參數,但也可使用地址傳遞修改外部變量。函數可以有返回值或無返回值,返回值類型必須與聲明一致。函數命名應清晰易懂,使用駝峰或下劃線命名法。遵循單一職責原則,保持函數簡潔性,以提高可維護性和可讀性。

本文討論了使用C中的移動語義來通過避免不必要的複制來提高性能。它涵蓋了使用std :: Move的實施移動構造函數和任務運算符,並確定了關鍵方案和陷阱以有效

本文討論了C中的動態調度,其性能成本和優化策略。它突出了動態調度會影響性能並將其與靜態調度進行比較的場景,強調性能和之間的權衡
