一.鏈式儲存結構個人理解
資料元素不再考慮相鄰位置,而是只要哪有空位就到哪,只要讓每個元素知道下一位元素的位置就好(用到指標)
二.單鏈表相關概念推出
1.資料域:a
i元素儲存自身資訊
2.指標域:
ai元素儲存指向後繼元素儲存位置的資訊
3.結點:包含資料域和指標域
4.單鏈表:每個結點只包含乙個指標域的線性表
5.頭指標(要素):鍊錶中第乙個結點的儲存位置(線性表最後乙個結點指標為空)
6.頭結點(非要素):單鏈表第乙個結點前附設乙個結點(其指標域指向第乙個結點的指標)
(若線性表是空表則頭結點的指標域為空)
三.單鏈表的儲存結構
typedef' int elemtype;
typedef struct node
node;//node==struct node
typedef struct node *linklist;//定義鍊錶linklist.這裡使得linklist==struct node *
四.解析p為第i個元素的指標
p->data//
ai的資料域
p->next//指向i+1個元素,即
ai+1的指標
p->next->data=
ai+1
五.單鏈表的讀取(思想:直到碰到想要的或者null停止)
思路:1.宣告乙個指標p指向第乙個結點並初始化j=1
2.j3.查詢成功返回結點p資料(依靠e)
status getelem(linklist l,int i,elemtype *e)
if(!p||j>i)
return error;
*e=p->data;//取第i個結點的資料
return ok;
}
六.單鏈表的插入
只需滿足:s->next=p->next;p->next=s;(順序固定)
思路:1.宣告指標p指向表頭結點並初始j=1
2.j3.查詢成功,系統生成乙個空結點s
4.將資料元素e賦值給s->data
5.單鏈表插入標準語句:s->next=p->next;p->next=s;
/*初始條件:表l存在(建表下章會將),1<=i<=listlength(l)*/
/*操作結果:在l中第i個結點位置之前插入新的資料元素e,l長加1*/
status listinsert(linklist l,int i,elemtype e)
if(!p||j>i)
return error;
s=(linklist)malloc(sizeof(node));//生成新結點,型別與node一樣來放資料e的s結點
s->data=e;//e的值在單鏈表的讀取中已經獲取,或自己輸入
s->next=p->next;
p->next=s;
return ok;
}
七.單鏈表的刪除
實質:p->next=p->next->next
分解實質:q=p->next;p->next=q->next;
思路:1.宣告指標p指向表頭指標並初始j=1
2.j3.看是否為空
4.查詢成功,q=p->next
5.刪除,p->next=q->next
6.將q結點資料賦值給e(後面利用是釋放p來刪除e)
7.釋放p
/*初始條件:表l存在,1<=i<=listlength(l)*/
/*操作結果:刪除l的第i個結點並用e返回值,l長減1*/
status listdelete(linklist l,int i,elemtype *e)
if(!(p->next)||j>i)
return error;//第i個結點不存在
q=p->next;
p->next=q->next;
*e=q->data;//將q結點的資料給e
free(q);**此結點
return ok;
八.個人小想法
其實插入刪除只要理解1.s->next=p->next;p->next=s;2.p->next=p->next->next這兩句,其他的都是比較硬性規定的記住就好,在實際操作中用單鏈表的地方還是比順序儲存結構要多的,後面我會寫很重要內容就是鍊錶的整體建立這是執行插入刪除等操作的前提
資料結構 線性表之單鏈表
線性表 亦作順序表 是最基本 最簡單 也是最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。線性表有兩種儲存結構 順序儲存結構,即儲存單元在一段連續的位址上儲存,常見的陣列就是順序儲存結構的線性表 鏈式儲存結構,即儲存單元...
資料結構專題 線性表之單鏈表
對比了好幾本書,比較少涉及單鏈表的賦值,為了親自跑出其他功能,花了不少時間,畢竟是打基礎嘛,相信以後會越來熟練 你為什麼那麼熟練,明明是我先 話不多說,下面是 及實驗結果。include include define elementtype int define maxsize 1000 defin...
C資料結構 線性表之單鏈表
單鏈表的設計之初,筆者在考慮乙個首要的問題,就是單鏈表的節點是在插入的函式內部建立,還是在函式外部建立。考慮到使用者在插入的時候,變數生命週期的不確定性以及容易造成記憶體洩漏等問題,綜合考慮之下使用了內部建立節點的方式。筆者設計的單鏈表中包含了單鏈表的反轉和合併等有趣的操作,其中的奧妙如果讀者有興趣...