(乾貨!)資料結構實驗2 鍊錶的實現和應用

2021-10-10 06:16:15 字數 2818 閱讀 7688

1. 實驗目的

掌握線性表的鏈式儲存結構設計與基本操作的實現。

2.實驗內容與要求

(1)定義線性表的鏈式儲存表示;

(2)基於所設計的儲存結構實現線性表的基本操作;

(3)線性表的應用:設線性表l1和l2分別代表集合a和b,試設計演算法求a和b的並集c,並用線性表l3代表集合c;

(4)設計乙個一元多項式計算器,要求能夠:

①輸入並建立多項式;

②輸出多項式;

③執行兩個多項式相加;

3.演算法思路(1)求並集:

①定義煉表表l1、l2、l3

②基於所設計的儲存結構實現鍊錶的基本操作:初始化、輸入輸出、查詢元素

③定義並集的函式,首先將l1全部複製進l3,再用locateelem函式判斷l3中是否含有l2中的元素,有則跳過,沒有就新建結點將元素用尾插法插入l3表中。

(2)多項式求和

①初始化多項式,輸入多項式內容

②進行加法運算:

③重複執行②直到ha或hb為空

④若ha非空則將其所指剩餘鍊錶加入結果鍊錶;若hb非空則將其所指剩餘鍊錶加入結果鍊錶。

⚠️在進行第②步時仍然需要分為兩步:

步驟?內容✍️

1⃣️令ha->pa中第乙個結點,hb->pb中的第乙個結點,hc->鍊錶中的最後乙個結點

2⃣️比較ha和hb所指結點的指數:ha所指結點指數較小,將該結點插入結果鍊錶,ha->下一結點,hc->新插入結點;hb所指結點指數較小,將該結點插入結果鍊錶,hb->下一結點,hc->新插入結點;ha和hb所指結點指數相同,則將pb係數加到pa所指結點上:若兩結點係數之和為0,兩結點均銷毀,ha、hb都指向下一結點;否則,ha所指結點插入結果鍊錶,hb所指結點銷毀,ha、hb均指向下乙個結點。

4.上**!

#include

using

namespace std;

typedef

struct lnode

lnode,

*linklist;

typedef

struct node

node,

*polynomial;

void

initlist

(linklist &l)

//初始化鍊錶

void

input

(linklist &l)

//尾插法

}void

output

(linklist l)

cout<

}int

locateelem

(linklist l,

int e)

//判斷l3中是否有l2元素 ,有返回1,沒有返回0

return0;

}void

union

(linklist l1,linklist l2,linklist &l3)

//求l1、l2並集

while

(q)else

q = q-

>next;}}

//輸入m項的係數和指數,建立表示一元多項式的帶有頭節點的有序鍊錶p

//利用尾插法

void

createpolyn

(polynomial &p,

int m)

}void

addpolyn

(polynomial &pa,polynomial &pb)

//多項式求和

else

if(ha-

>expn > hb-

>expn)

//hb可插入

else

else}}

if(!ha)

hc->next = hb;if(

!hb)

hc->next = ha;

free

(pb);}

void

print

(polynomial p)

else

else

if(p-

>expn ==1)

else

if(p-

>next-

>coef <0)

else

if(p-

>coef <0)

else

} cout<

>coef<<

"x^"

<

>expn<

intmain()

5.執行結果?

6.心得體會

第一次做題時忽略了並集有重複元素的情況,開始用了兩種思路解決,第乙個全部插入l3之後,遍歷l3刪除有重複元素的結點,但因為是無序排列,沒有想出演算法;第二種是通過查閱可以定義一維陣列a,初始將其所有元素設為0,讀到數x時,a[x]++,之後遍歷時發現a[x]!=0說明是重複元素,需要刪除。但這種方法占用儲存空間太大,故捨去。最後使用了locateelem函式,在插入前檢查該l2元素是否已經存在在l3內。在做多項式時的輸出需要考慮多種情況,指數和係數為1、0和負數時有著不同的輸出方案。

資料結構 2 鍊錶

填補那些模稜兩可的後知後覺 public class linkedlist public node e e public node override public string tostring private node dummyhead 虛擬頭節點 private int size 元素個數 p...

資料結構2 鍊錶

首先來說乙個問題,線性表和鍊錶的區別。線性表是n個資料元素的有限序列,複雜的線性表中,資料元素可以有若干個資料項構成乙個記錄。線性表可以有兩種表示方式,順序表示和鏈式表示。線性表的順序表示是用一組連續的記憶體儲存線性表的資料元素。而線性表的鏈式表示是用隨機的儲存單元來儲存線性表的元素,這種線性表就是...

資料結構實驗一(鍊錶)

1.seqlist.h ifndef seqlist h define seqlist h const int maxsize 10 class seqlist seqlist int a,int n seqlist void insert int i,int x int delete int i ...