最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)據(jù)結構線性表教程示例詳解

 更新時間:2022年02月15日 09:21:52   作者:喬喬家的龍龍  
這篇文章主要為大家介紹了C語言數(shù)據(jù)結構線性表的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

線性表

數(shù)據(jù)結構里我們時??吹绞裁词裁幢?,線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結構,其他各種表的萬惡之源就是這個線性表,他是個啥其實顧名思義:

一個線性表是n個具有相同特性的數(shù)據(jù)元素的有限序列。數(shù)據(jù)元素之間的關系是一對一的關系,即除了第一個和最后一個數(shù)據(jù)元素之外,其它數(shù)據(jù)元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。比如,循環(huán)鏈表邏輯層次上也是一種線性表(存儲層次上屬于鏈式存儲,但是把最后一個數(shù)據(jù)元素的尾指針指向了首位結點)。

說的這么復雜其實就是下面這個模型,線性表的邏輯結構簡單,便于實現(xiàn)和操作。因此,線性表這種數(shù)據(jù)結構在實際應用中是廣泛采用的一種數(shù)據(jù)結構。

在這里插入圖片描述

而我們說的線性是指他的連續(xù)性,并非是內(nèi)存上連續(xù),而是邏輯上連續(xù),什么又是邏輯上連續(xù)?我們說數(shù)據(jù)結構有兩種結構,一是物理結構即在內(nèi)存中怎么存,二是邏輯結構是我們假想的。物理結構其實非數(shù)組即鏈表,基本都逃不開這倆,但數(shù)組有個致命的缺陷就是不知道咱要存多少,我開辟10個空間,若想存第11個就是放屁,那直接給他1000個空間呢?那剩下989個空間直接浪費掉,一句話就是他不能按需所取。

這時鏈表就應運而生,我們有幾個數(shù)據(jù)就開辟幾個空間,眾所周知數(shù)組我們得到首元素地址,直接遍歷就能得到全部成員,那它怎么去串聯(lián)這些獨立零散的空間來建立聯(lián)系?我們按需所取首先就會選擇去堆區(qū)申請空間,去堆區(qū)不是一定是最好,因為 malloc 函數(shù)嘛, 滿足要就拿不要就釋放。我們對數(shù)據(jù)尋蹤覓跡是通過其對應的地址對吧,不難想到應用指針吧,這樣那我們就可以“有備而來”,在開辟數(shù)據(jù)空間時多開辟4到8個字節(jié)來存放指針,最后一個數(shù)據(jù)我們不需要指針了,直接放一個空指針就行。

在這里插入圖片描述

順序表

線性表主要由順序表示或鏈式表示。在實際應用中,常以棧、隊列、字符串等特殊形式使用。

順序表是在計算機內(nèi)存中以數(shù)組的形式保存的線性表,線性表的順序存儲是指用一組地址連續(xù)的存儲單元依次存儲線性表中的各個元素、使得線性表中在邏輯結構上相鄰的數(shù)據(jù)元素存儲在相鄰的物理存儲單元中,即通過數(shù)據(jù)元素物理存儲的相鄰關系來反映數(shù)據(jù)元素之間邏輯上的相鄰關系,采用順序存儲結構的線性表通常稱為順序表。

我們說過線性表中結構不是物理就是邏輯,我們的順序表其實就是使用數(shù)組來存儲數(shù)據(jù),本質(zhì)上來說順序表就是一個數(shù)組。

在這里插入圖片描述

拋開實際的代碼談概念就是耍流氓,我們采用工程化方式來寫一組代碼,在.h文件中進行定義:

typedef int type;//便于隨時修改類型
#define n 10 //方便定義數(shù)組大小
struct SeqList
{
	type a[n];
	int size;
};
void PushBack(struct SeqList* p, type x);
void PopBack(struct SeqList* p, type x);
……
//后面這些為尾插,尾刪等接口來處理他們之間的關系

以上的代碼就是很多教材上的靜態(tài)順序表設計結構,咱跳出來看看就會秒感很low,他是固定大小不能按需所取,其實就是封裝了一個數(shù)組,我們要變成動態(tài)順序表很簡單,增設一個capacity成員即可:

typedef int type;
#define n 10 
struct SeqList
{
	type a[n];
	int size;   //有效數(shù)據(jù)的個數(shù)
	int capacity;   //容量,即空間的大小
};
void PushBack(struct SeqList* p, type x);
void PopBack(struct SeqList* p, type x);
……

擴容操作我們手動操作,只需引入 realloc 函數(shù)即可,如果是將分配的內(nèi)存擴大,則有以下情況:

如果當前內(nèi)存段后面有需要的內(nèi)存空間,則直接擴展這段內(nèi)存空間,realloc函數(shù)將返回原指針。如果當前內(nèi)存段后面的空閑字節(jié)不夠,那么就使用堆中的第一個能夠滿足這一要求的內(nèi)存塊,將目前的數(shù)據(jù)復制到新的位置,并將原來的數(shù)據(jù)塊釋放掉,返回新的內(nèi)存塊位置。如果申請失敗,將返回NULL,此時,原來的指針仍然有效。

今天就到這里吧,摸了家人們,更多關于C語言數(shù)據(jù)結構線性表的資料請關注腳本之家其它相關文章!

相關文章

  • C++面試八股文之如何實現(xiàn)strncpy函數(shù)

    C++面試八股文之如何實現(xiàn)strncpy函數(shù)

    strncpy函數(shù),主要用做字符串復制,將于字符從一個位置復制到另一個位置,那么如何實現(xiàn)一個strncpy函數(shù),下面小編就來和大家簡單講講吧
    2023-07-07
  • c++中的消息框messagebox()詳細介紹及使用方法

    c++中的消息框messagebox()詳細介紹及使用方法

    本文將介紹下c++中的messagebox()的使用方法:常用屬性/按鈕的形式/返回值等等,感興趣的朋友可以了解下,希望本文可以幫助到你
    2013-02-02
  • C語言關鍵字union的定義和使用詳解

    C語言關鍵字union的定義和使用詳解

    這篇文章主要介紹了C語言關鍵字union的定義和使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 使用opencv拉伸圖像擴大分辨率示例

    使用opencv拉伸圖像擴大分辨率示例

    這篇文章主要介紹了使用opencv拉伸圖像擴大分辨率示例,需要的朋友可以參考下
    2014-04-04
  • C++判斷pe文件實例

    C++判斷pe文件實例

    這篇文章主要介紹了C++判斷pe文件的方法,包含了文件操作的具體實現(xiàn)方法,具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • 詳解C++ 臨時量與臨時對象及程序的相關優(yōu)化

    詳解C++ 臨時量與臨時對象及程序的相關優(yōu)化

    這篇文章主要介紹了C++ 臨時量與臨時對象及程序的相關優(yōu)化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • C語言回溯法 實現(xiàn)組合數(shù) 從N個數(shù)中選擇M個數(shù)

    C語言回溯法 實現(xiàn)組合數(shù) 從N個數(shù)中選擇M個數(shù)

    在平時的算法的題目中,時常會遇到組合數(shù)相關的問題,暴力枚舉。在N個數(shù)中挑選M個數(shù)出來。利用for循環(huán)也可以處理,但是可拓展性不強,于是寫這個模板供以后參考
    2018-08-08
  • C語言對組文件處理的相關函數(shù)小結

    C語言對組文件處理的相關函數(shù)小結

    這篇文章主要介紹了C語言對組文件處理的相關函數(shù)小結,包括setgrent()函數(shù)和getgrent()函數(shù)以及endgrent()函數(shù),需要的朋友可以參考下
    2015-08-08
  • centos 7 vscode cmake 編譯c++工程的教程詳解

    centos 7 vscode cmake 編譯c++工程的教程詳解

    這篇文章給大家介紹了centos 7 使用vscode+cmake配置簡單c++項目的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-05-05
  • OpenGL畫bezier曲線

    OpenGL畫bezier曲線

    這篇文章主要為大家詳細介紹了OpenGL畫bezier曲線,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

龙山县| 和林格尔县| 馆陶县| 东兴市| 垣曲县| 从化市| 苗栗县| 连城县| 玛纳斯县| 金堂县| 溧阳市| 嘉义市| 海盐县| 改则县| 辽源市| 临洮县| 林西县| 布尔津县| 临西县| 锡林浩特市| 中宁县| 临猗县| 昌江| 平山县| 灵石县| 石台县| 分宜县| 蒙阴县| 德安县| 伊吾县| 新乡市| 禄丰县| 湘潭市| 铁岭市| 德安县| 丹阳市| 康保县| 苍梧县| 师宗县| 昂仁县| 乐安县|