資料結構1 1 線性表

2021-07-01 22:16:40 字數 2371 閱讀 2021

線性表

:n個資料元素(a1,a2......an)的有限序列,大小為0的表為空表。

前驅:在非空表中我們稱a(i+1)是ai前驅。

後繼:在非空表中我們稱a(i--1)是ai後繼。

用一組位址連續的順序儲存單元一次儲存線性表的資料元素。(通常使用陣列來實現)

插入和刪除最壞情況都需要o(n)。

鍊錶由一系列不必在記憶體中相連的結構組成,每乙個結構均含有表元素和指向包含該元素後繼元的結構指標。最後乙個元素的後繼指標指向null。

該結構(又稱為結點)由兩個域組成:資料域和指標域,資料域儲存資料元素資訊,指標域儲存後繼結點的位址。

如果l為linklist型的變數,則l為單鏈表的頭指標,它指向表中第乙個結點。如果l為空則表為空。

有時候我們附設乙個頭結點,資料域可以不儲存資料,也可以儲存如線性表長度等的附加資訊,指標域儲存第乙個結點的指標,稱之為

頭結點。

單鏈表的建立一般有兩種方法:頭插法和尾插法。

頭插法從乙個空表開始,建立新結點,將輸入的資料存放到新結點的資料域中,然後將新結點插入到當前鍊錶的表頭上,直到結束為止。簡單來說,就是把新加進的元素放在表頭後的第乙個位置,如圖所示

**如下:

linklist creatlisthead(int n)

return l;

}

尾插法

從字面意思可以理解為在表的最後插入結點。從乙個空表開始,建立新結點,將輸入的資料存放到新結點的資料域中,然後將新結點插入到當前鍊錶的表尾上,直到讀入結束標誌為止。如圖所示

**如下

linklist creatlisttail(int n)

r->next=null;

return l;

}

單鏈表的刪除命令可以通過修改乙個指標來實現,如圖所示:

**如下:

//刪除鍊錶第n個元素。
int deletelist(linklist l,int n)

if(!(p->next))

return 0;

q = p->next;

p->next = q->next;

free(q);

return 0;

}

單鏈表的插入需要使用malloc呼叫從系統得到乙個新單元並在之後執行兩次指標調整,如圖所示:

**如下

//假設插入到第n個結點的前面,插入的元素為e

void insertlist(linklist l,int n,int e)

if(!(p->next))

return;

s->next = p->next;

p->next = s;

return ;

}

表中最後乙個結點的指標指向頭結點,整個鍊錶形成乙個環。

迴圈鍊錶的操作和線性鍊錶基本一致,差別僅在於演算法中的迴圈條件。(不是p為空或者p->next為空,而是他們是否等於頭指標)

在雙向鍊錶中結點有兩個指標域,乙個指向直接後繼,另乙個指向直接前驅

雙向鍊錶的描述可以如下:

typedef struct dulnode

dulnode,*dulinklist;

和單鏈表類似,雙向鍊錶也有

迴圈表,如圖所示:

資料結構 1 1 線性表

單鏈表.cpp include linklist.h include template linklist linklist template void linklist clear head null template linklist linklist t data,int msize templ...

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...