資料結構學習 線性表的鍊錶儲存

2021-06-26 18:56:45 字數 2508 閱讀 4905

線性表的鍊錶儲存,今天主要對其中重要的操作進行分析,其他的操作均可由基本操作拓展得到。

學資料結構必須得吃透每乙個句子,只有真正理解了,資料結構才能了然於心。

#include#include#define ok 1

#define error 0

typedef int elemtype; //使用者自定義型別

typedef struct lnode

lnode,*linklist;

int initlinklist(linklist &t) /

int insertelement(linklist t,elemtype elem)

int deleteelement(linklist t,elemtype elem)

} printf("刪除資料不存在\n");;

return error;

}int listlength(linklist t)

return j;

}void visitlinklist(linklist t)

}int main()

注意:

一.typedef struct 和struct區別

typedef struct lnode

lnode,*linklist;

1.typedef的作用是什麼?簡單地講,為現有型別建立乙個新的名字,或稱為型別別名。

typedef struct 

lnode,*linklist;

那麼這個與前乙個又有什麼區別呢?顯然,這個struct並沒有名字,因此當定義struct lnode *next時,編譯器根本不曉得存在乙個結構體叫lnode。儘管我們用typedef為struct建立乙個新名字lnode.

我們現在來看一看實際上第一段**是分為兩個部分的。

第一部分:

struct lnode

;

第二部分

typedef struct lnode lnode,*linklist
也就是說先對結構體定義,然後再起別名。

二.lnode和linklist區別

結構體型別lnode是單鏈表中的結點型別,它包括兩個成員項,其一是資料域elem,用於存放某個資料元素本身的資訊,其型別為通用型別標示符elemtype,由使用者在使用時自行定義;其二是指標域next,用於存放某結點的直接後繼結點的儲存位址,即它指向某結點的直接後繼結點,顯然型別為struct lnode *型別。

linklist是指向lnode結構體型別的指標型別,實際上就是和lnode*型別一樣,只不過名字不一樣而已。

兩者的大小區別:

(1)lnode因為是結構體大小,所以所佔記憶體大小由結構體內的變數大小所決定。

(2)linklist是指標,而指標的記憶體空間無論指向什麼型別的變數,都只跟cpu定址字長有關,而在我的系統中長度為4.

三.指標和指標引用

int initlinklist(linklist &t)                   /  

一開始我很奇怪,為什麼需要對linklist加上引用.

指標其實類似於int、char等型別,只不過其存放的是位址,而不是乙個具體的元素資訊。

由此,當我沒加上&的時候

int initlinklist(linklist t)                   /  

這個函式為t申請乙個頭結點,其分配的空間會在函式結束後消失,並不能改變實參。

而當加上&後,在函式裡申請到的頭結點會影響到實參,從而達到了修改實參的效果。

四.為什麼在其他函式裡卻不用加&

int insertelement(linklist t,elemtype elem)       

(1)我在這裡沒有加&的原因很簡單,實際上我並不需要對t所指向的內容進行修改。而我需要修改的是t->next的內容

由於next是struct lnode*型別,所以我在函式裡可以直接對next所指向的內容直接進行修改。

(2)是否有必要每次都要重新定義乙個linklist p指向頭結點

int insertelement(linklist &t,elemtype elem)       

我在上面已經講過,如果在
int insertelement(linklist &t,elemtype elem)   裡對linklist加上引用後,會對實參t進行修改

所以當你用t=t->next時,t所指向的內容一直在改變,而我們其實並不需要它改變,由此我們將t的所指向的內容賦給p,p進行p=p->next,

當函式結束時p所指向的內容會消失,而不會對實參造成任何影響。

資料結構學習 線性表 鍊錶

一 線性表 定義 有同型別資料元素構成有序序列的線性結構 基本操作 typedef intposition typedef struct lnode list struct lnode 初始化 list makeempty 查詢 define error 1 position find list l...

資料結構學習 線性表

線性表一般分為順序結構和鏈式結構。順序表裡面元素的位址是連續的,如陣列 鍊錶裡面節點的位址不是連續的,是通過指標連起來的,如單鏈表 順序結構 優點 易於查詢,索引快 list n 這樣的操作,o 1 複雜度。缺點 擴充套件性弱,不易刪除 插入,這兩項操作均是o n 的時間複雜度 鍊錶結構 優點 擴充...

資料結構學習 線性表

考試前複習下資料結構,把一些知識點整理在這!主要參考了殷人昆主編的 資料結構 用物件導向方法與c 語言描述 這本書,以及中山大學劉聰老師的課件內容!鍊錶雙鏈表 線性表 linear list 是由n n 0 個資料元素 結點 a 0 a 1 a 2 a n 1 組成的有限序列。維基百科 線性表是乙個...