線性表的實現

2021-03-31 08:56:57 字數 1770 閱讀 9910

線性表(liner list)

線性表的順序儲存及操作實現

所謂順序儲存就是把線性表的各元素依次順序地存放倒計算機記憶體中的一組位址連續的儲存單元。採用順序儲存的線性表又叫順序表。

順序表是一種隨機訪問的儲存結構。

順序表的操作實現:

#define maxlen 100

tpyedef struct

listtp;

listtp l;

1、初始化

void initlist(listtp &l)

2、求線性表的長度

int listlen(listtp &l)

3、查詢元素

int localelem(listtp &l,datatype x, int i)

}

5、刪除元素

void delelem(listtp &l,int i)

}順序儲存適用於很少或根本不作插入、刪除操作或只在表的端點處進行插入、刪除等情況。

線性表的鏈式儲存及操作實現

所謂鏈式儲存就是邏輯上相鄰的兩個節點在儲存位置上不相鄰。採用鏈式儲存結構的線性表稱為鍊錶。

typedef struct lnode

linklist;

linklist *head;

單鏈表的基本操作:

1、建立鍊錶

linklist *initlist_l(linklist *head,int n)

return l;

}2、按給定值查詢元素

linklist *locallist(linklist *head,datatype x)

return p; 

}3、插入

(1)後插

insertafter_l(linklist *s,datatype x)

(2)前插

insertfore_l(linklist *head,linklist *s,datatype x)

q->next=p;

p->next=s;

}4、刪除

delelem_l(linklist *head,linklist *s)

p->next=s->next;

free(s); 

}迴圈鍊錶

單鏈表最後乙個節點的指標域指向頭節點,這時整個鍊錶就形成乙個環,稱這種鏈式儲存結構為迴圈鍊錶。

操作與單鏈表基本相同。

雙向鍊錶

節點中除資料域外,既含有指向直接前趨的指標域prior,又含有直接後繼的指標域next。

typedef struct dlnode

dlinklist;

1、雙向鍊錶前插

insertfore_dl(dlinklist *s,datatype x)

2、雙向鍊錶刪除

delelem_dl(dlinklist *s)

順序表與鍊錶的比較

1、從儲存空間利用率角度出發

順序表的儲存空間是靜態分配的,可能過大,浪費空間,可能過小,產生溢位。

鍊錶的儲存空間是按需動態分配的,只要記憶體中有可分配空間,就不會產生溢位。

所以,當線性表的長度變化不大,且能預先估計出儲存容量大小時,為了節省儲存空間(鍊錶中指標域需佔額外儲存空間)宜採用順序儲存結構。

2、從時間效率角度考慮

順序表是隨機儲存結構,時間複雜度為o(1),而鍊錶中每個節點訪問都必須從頭指標起,順鏈掃瞄才能實現。

因此,當對線性表進行的主要操作是查詢,而很少進行插入刪除操作時,宜採用順序表儲存結構。當對線性表進行插入和刪除操作頻繁時,宜採用鍊錶作為儲存結構。

線性表實現

僅由乙個結構體組成,定義及實現如下所示 struct order list typedef struct order list list 指向該結構體的指標 初始化 list initial 查詢元素x的下標 intfind list l,elementtype x 在位置p前插入元素x bool ...

線性表的實現

個人覺得比較難的幾個地方是 1.指標的使用.你會突然發現c學的簡單的指標不夠用了,需要學更多的關於指標的東西 2.關於陣列角標的計算.這種東西拿特殊情況帶一下就能算出來啦.下面還是po出我的 供大家交流學習 title array function practice 1 date 2016 9 29...

線性表的實現

線性表的定義,初始化,插入和刪除及列印輸出 include include include 線性表儲存空間的初始分配量 define list init size 100 線性表的儲存空間的分配增量 define list increment 10 typedef structsqlist 對於線性...