顺序表的概念及定义
順序表
結(jié)點(diǎn)的概念
結(jié)點(diǎn) :結(jié)點(diǎn)是內(nèi)存中一片由用戶分配的儲(chǔ)存空間,只有一個(gè)地址來表示它的存在,沒有顯式名稱。
在學(xué)習(xí)順序表時(shí),一般不會(huì)去特別強(qiáng)調(diào)結(jié)點(diǎn)的概念,此概念往往在鏈表學(xué)習(xí)中涉及,但并不代表結(jié)點(diǎn)與順序表無關(guān),所以我特意把結(jié)點(diǎn)的概念放在此處以加深對(duì)順序表的理解。
順序表的概念
定義:把邏輯上相鄰的結(jié)點(diǎn)儲(chǔ)存在物理位置上的相鄰儲(chǔ)存單元中,結(jié)點(diǎn)的邏輯關(guān)系由儲(chǔ)存單元的鄰接關(guān)系來體現(xiàn)
通俗來講,順序表就是把線性表中的所有元素按照其邏輯順序,依次儲(chǔ)存到從指定的儲(chǔ)存位置開始的一塊連續(xù)的儲(chǔ)存空間中。
第一個(gè)元素的儲(chǔ)存位置就是指定的儲(chǔ)存位置,第 i+1 個(gè)元素的儲(chǔ)存位置在第 i 個(gè)元素后面
順序表的特性
- 占用連續(xù)的儲(chǔ)存空間:由定義可知順序表的儲(chǔ)存空間必然連續(xù),并且存儲(chǔ)分配只能預(yù)先進(jìn)行,一旦分配完畢,在操作過程中始終不變。
- 隨機(jī)訪問特性:因?yàn)閮?chǔ)存空間是連續(xù)的,知道第一個(gè)元素的地址(即儲(chǔ)存空間的首地址)可以輕松訪問儲(chǔ)存的所有數(shù)據(jù)。每一個(gè)結(jié)點(diǎn)對(duì)應(yīng)一個(gè)序號(hào),由該序號(hào)可以直接算出結(jié)點(diǎn)的儲(chǔ)存地址。
順序表三要素
- 順序表基地址
- 順序表長度
- 順序表總空間大小
順序表結(jié)構(gòu)體定義
typedef struct _Sqlist Sqlist; struct _Sqlist {int *elems; //順序表基地址int length; //順序表長度int size; //順序表總空間大小 };當(dāng)然C語言提供了一種簡單的寫法(如下,以后以簡單寫法為例)。
typedef struct{int *elems; //順序表基地址int length; //順序表長度int size; //順序表總空間大小}Sqlist;在某些書籍上,有這樣定義順序表的
#define MAXSIZE 100 typedef struct {int data[MAXSIZE]; //存放順序表元素的數(shù)組int length; //存放順序表的長度 }Sqlist;- 實(shí)際上這種定義已經(jīng)為順序表開辟了一部分內(nèi)存空間,而前者需要使用函數(shù)來順序表初始化。
- 但實(shí)際上兩種代碼本質(zhì)上是一樣的,因?yàn)榍罢咴?strong>順序表的操作——初始化順序表中的函數(shù)定義中,我們?nèi)孕枰峙湟黄瑑?chǔ)存空間并且定義一個(gè)存放順序表元素的數(shù)組;而后者相當(dāng)于把這一步合并到了定義中。
- 在學(xué)習(xí)過程而非實(shí)際開發(fā)中,我更傾向于前者,因?yàn)檫@更能反應(yīng)順序表的三要素,并且與鏈表代碼書寫風(fēng)格相似,有利于感受線性表思想的共性。
結(jié)束
我們現(xiàn)在已經(jīng)成功定義順序表了,但更重要的是它的操作,所以下一篇文章就來寫這部分內(nèi)容。
總結(jié)
- 上一篇: C语言结构体指针与结构体变量作形参的区别
- 下一篇: 链表的定义