已知遞增有序的單鏈表a、b (a、b中元素個數分別為m、n,且a、b都帶有頭結點)分別儲存了乙個集合,請設計演算法,以求出兩個集合a和b的差集a-b (僅由在a**現而不在b**現的元素所構成的集合)。將差集儲存在單鏈表a中,並保持元素的遞增有序性。
分析:只需從a中刪去a與b中共有的元素即可。由於兩個鍊錶中的元素是遞增有序的,因此可以這麼做:設定兩個指標p、q開始時分別指向a和b的開始結點。迴圈進行以下判斷和操作:如果p所指結點的值小於q所指結點的值,則p後移一位;如果q所指結點的值小於p所指結點的值,則q後移一位:如果兩者所指結點的值相同,則刪除p所指結點。最後,p與q任一指標為null時演算法結束。
實現如下:
#include
using
namespace std;
typedef
struct lnode
lnode;
void
different
(lnode* a,lnode* b)
else
if(b-
>data > a-
>data)
else}}
void
createlistr
(lnode *
&l,int a,
int n)
//尾插法
r->next =
null
; l = c;
}int
main()
;int b[5]
=;lnode *a =
(lnode*
)malloc
(sizeof
(lnode));
lnode *b =
(lnode*
)malloc
(sizeof
(lnode));
createlistr
(a, a,6)
;createlistr
(b, b,5)
;different
(a, b)
;for
(a=a-
>next; a !=
null
; a = a-
>next)
}
資料結構(線性表)
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...
資料結構 線性表
線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...