1. 實驗目的
掌握線性表的鏈式儲存結構設計與基本操作的實現。2.實驗內容與要求
(1)定義線性表的鏈式儲存表示;3.演算法思路(1)求並集:(2)基於所設計的儲存結構實現線性表的基本操作;
(3)線性表的應用:設線性表l1和l2分別代表集合a和b,試設計演算法求a和b的並集c,並用線性表l3代表集合c;
(4)設計乙個一元多項式計算器,要求能夠:
①輸入並建立多項式;
②輸出多項式;
③執行兩個多項式相加;
①定義煉表表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 ...