什麼是 C 中的數據結構以及如何使用它們?
已發表: 2021-02-26目錄
介紹
首先,數據結構是在一個名稱或標題下保存在一起的數據項的集合,是一種存儲和組合數據的特定方式,以便可以有效地使用數據。
類型
數據結構在幾乎每個軟件系統中都很普遍並使用。 一些最常見的數據結構示例是數組、隊列、堆棧、鍊錶和樹。
應用
在設計編譯器、操作系統、製作數據庫、人工智能應用程序等方面。
分類
數據結構分為兩類:原始數據結構和非原始數據結構。
1. Primitive:它們是編程語言支持的基本數據類型。 這種分類的一個常見示例是整數、字符和布爾值。
2. 非原始:這些數據結構類別是使用原始數據結構創建的。 示例包括鏈接堆棧、鏈接列表、圖形和樹。

數組
數組是具有相同數據類型的數據元素的簡單集合。 這意味著整數類型的數組只能存儲整數值。 數據類型 float 的數組可以存儲與 float 數據類型相對應的值,僅此而已。
存儲在數組中的元素可以線性訪問,並且存在於可以使用索引引用的連續內存塊中。
聲明一個數組
在 C 中,數組可以聲明為:
數據類型名稱[長度];
例如,
國際訂單[10];
上面的代碼行創建了一個由 10 個內存塊組成的數組,其中可以存儲一個整數值。 在 C 中,數組索引值從 0 開始。因此索引值的範圍是 0 到 9。如果我們想要訪問該數組中的任何特定值,我們只需鍵入:
printf(order[index_number]);
聲明數組的另一種方法如下:
data_type array_name[size]={值列表};
例如,
整數標記[5]={9, 8, 7, 9, 8};
上面這行命令創建了一個包含 5 個內存塊的數組,每個內存塊的值都是固定的。 在 32 位編譯器上,int 數據類型占用的 32 位內存為 4 個字節。 因此,5 個內存塊將佔用 20 個字節的內存。
初始化數組的另一種合法方法是:
整數標記 [5] = {9 , 45};
此命令將創建一個由 5 個塊組成的數組,最後 3 個塊的值為 0。
另一種合法的方式是:
整數標記 [] = {9, 5, 2, 1, 3,4};
C 編譯器知道只需 5 個塊即可將這些數據放入一個數組中。 因此它將初始化一個大小為 5 的名稱標記數組。
類似地,可以通過以下方式初始化二維數組
整數標記[2][3]={{9,7,7},{6,2,1}};
上面的命令將創建一個 2 行 3 列的二維數組。
閱讀:數據結構項目的想法和主題
運營
可以對數組執行一些操作。 例如:
- 遍歷數組
- 在數組中插入一個元素
- 在數組中搜索特定元素
- 從數組中刪除特定元素
- 合併兩個數組,
- 對數組進行排序——按升序或降序。
缺點
分配給數組的內存是固定的。 這實際上是一個問題。 比如說,我們創建了一個大小為 50 的數組,並且只訪問了 30 個內存塊。 剩下的 20 個塊佔用內存沒有任何用處。 因此,為了解決這個問題,我們有一個鍊錶。
鍊錶
鍊錶,非常像數組串行存儲數據。 主要區別在於它不會一次存儲所有內容。 而是在需要時存儲數據或使內存塊可用。 在鍊錶中,塊分為兩部分。 第一部分包含實際數據。

第二部分是指向鍊錶中下一個塊的指針。 指針存儲下一個保存數據的塊的地址。 還有一個稱為頭指針的指針。 head 指向鍊錶中的第一塊內存。 以下是鍊錶的表示。 這些塊也稱為“節點”。
資源
初始化鍊錶
為了初始化鏈接列表,我們創建了一個結構名稱節點。 結構有兩點。 1. 它保存的數據和 2. 指向下一個節點的指針。 指針的數據類型將是結構的數據類型,因為它指向結構節點。
結構節點
{
整數數據;
結構節點*下一個;
};
在鍊錶中,最後一個節點的指針不會指向任何東西,或者簡單地說,將指向 null。
另請閱讀:數據結構中的圖
鍊錶遍歷
在鍊錶中,最後一個節點的指針不會指向任何東西,或者簡單地說,它會指向 null。 因此,為了遍歷整個鍊錶,我們創建了一個初始指向頭部的虛擬指針。 並且,對於鍊錶的長度,指針繼續向前移動,直到它指向 null 或到達鍊錶的最後一個節點。
添加節點
在特定節點之前添加節點的算法如下:
- 設置兩個最初指向 head 的虛擬指針(ptr 和 preptr)
- 移動 ptr 直到 ptr.data 等於我們打算插入節點之前的數據。 preptr 將是 ptr 後面的 1 個節點。
- 創建節點
- 虛擬 preptr 指向的節點,該節點的 next 將指向這個新節點
- 新節點的 next 將指向 ptr。
在特定數據之後添加節點的算法將以類似的方式完成。
鍊錶的優點
- 與數組不同的動態大小
- 在鍊錶中執行插入和刪除操作比在數組中更容易。
隊列
隊列遵循先進先出或 FIFO 類型的系統。 在數組實現中,我們將有兩個指針來演示 Queue 的用例。
資源
FIFO基本上意味著首先進入堆棧的值,首先離開數組。 在上面的隊列圖中,指針 front 指向值 7。如果我們刪除第一個塊(dequeue),front 現在將指向值 2。同樣,如果我們輸入一個數字(入隊),比如 3 in位置 5。然後,後指針將指向位置 5。
上溢和下溢條件
然而,在將數據值輸入隊列之前,我們必須檢查溢出情況。 當嘗試將元素插入已滿的隊列時,將發生溢出。 當尾部 = max_size–1 時,隊列將滿。
同樣,在從隊列中刪除數據之前,我們應該檢查下溢情況。 當試圖從已經為空的隊列中刪除元素時,將發生下溢,即如果front = null 並且rear = null,則隊列為空。
堆
棧是一種數據結構,我們只在一端插入和刪除元素,也稱為棧頂。 因此,堆棧實現被稱為後進先出 (LIFO) 實現。 與隊列不同,對於堆棧,我們只需要一個頂部指針。

如果我們想在數組中輸入(推入)元素,頂部指針向上移動或遞增 1。如果我們要刪除(彈出)一個元素,頂部指針遞減 1 或向下移動 1 個單位。 堆棧支持三種基本操作:push、pop 和 peep。 窺視操作只是顯示堆棧中的最頂部元素。
資源
從世界頂級大學在線學習軟件課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
結論
在本文中,我們討論了 4 種類型的數據結構,即數組、鍊錶、隊列和堆棧。 希望您喜歡這篇文章,並繼續關注更多有趣的閱讀。 直到下一次。
如果您有興趣了解有關 Javascript、全棧開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,提供 500 多個小時的嚴格培訓,9 個以上的項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。
什麼是編程中的數據結構?
數據結構是我們在程序中排列數據的方式。 兩個最重要的數據結構是數組和鍊錶。 數組是最熟悉的數據結構,也是最容易理解的。 數組基本上是相關項目的編號列表。 它們易於理解和使用,但在處理大量數據時效率不高。 鍊錶更複雜,但如果使用得當,它們會非常有效。 當您必須在大列表中間添加或刪除項目時,或者當您需要在大列表中搜索項目時,它們是不錯的選擇。
鍊錶和數組有什麼區別?
在數組中,索引用於訪問元素。 數組中的元素按順序組織,如果使用索引,則可以輕鬆訪問和修改元素。 數組也有固定的大小。 元素是在創建時分配的。 在鍊錶中,指針用於訪問元素。 鍊錶的元素不一定按順序存儲。 鍊錶的大小未知,因為它可以在創建時包含節點。 指針用於訪問元素,因此內存分配更容易。
C語言中的指針是什麼?
指針是 C 中的一種數據類型,它存儲任何變量或函數的地址。 它通常用作對另一個內存位置的引用。 指針可以保存數組、結構、函數或任何其他類型的內存地址。 C 使用指針向函數傳遞值和從函數接收值。 指針用於動態分配內存空間。