線性表之單鏈表求集合並集

2021-10-25 00:20:41 字數 4439 閱讀 5467

掌握以下內容

1、單鏈表的建立

2、將資料插入單鏈表

3、單鏈表合併

4、單鏈表去重

2020/10/20

typedef

char elem;

typedef

struct lnode

lnode;

//將結構體命名為lnode

int

initlist

(lnode *

&l) l -

> next =

null

;return1;

}

//求單鏈表的長度

intlinklist_length

(lnode *l)

return j;

}

//在第i個位置插入結點

bool

insertafter_linklist

(lnode *

&l, elem x,

int i)

if(i > n+1)

//判斷插入位置是否合法

p = l;

int j;

for(j =

0; p && j < i -

1; j++

) p = p -

> next;

//查詢到第i結點前一結點

s =(lnode*

)malloc

(sizeof

(lnode));

if(s ==

null

)//判斷申請空間是否成功

return

false

; s -

> data = x;

s -> next = p -

> next;

p -> next = s;

return

true;}

}

void

list_sort

(lnode *

&l) p = p-

>next;

//將p移至下乙個位置}}

}

void

del_sam

(lnode *l)

//去重

else

//如果相等就移至下乙個結點

} p1 -

> next =

null

;//在最後加上null,使其成為完整鍊錶

}

lnode*

mesh_linklists

(lnode *l1, lnode *l2)

//l1和l2為遞增序列,都有頭結點

int i =1;

p1 = l1 -

> next;

p2 = l2 -

> next;

while

(p1 && p2)

//如果l1 -> next與l2 -> next均不為空,執行迴圈

else

}//長鍊表較短鍊錶多出的部分接在l3鍊錶的後面

while

(p1)

//l1較長時

while

(p2)

//l2較長時

del_sam

(l3)

;//去除重複資料

return l3;

}

//輸出線性表

void

print_linklist

(lnode *l)

printf

("\n");

}

#include

"linklist.cpp"

intmain()

; elem b[10]

=;int i;

lnode *l1,

*l2,

*l3;

initlist

(l1)

;initlist

(l2)

;for

(i =

0; a[i]

; i++

)//將

for(i =

0; b[i]

; i++

)printf

("原 集 合a:");

print_linklist

(l1)

;printf

("原 集 合b:");

print_linklist

(l2)

;list_sort

(l1)

;list_sort

(l2)

;printf

("有序集合a:");

print_linklist

(l1)

;printf

("有序集合b:");

print_linklist

(l2);

l3 =

mesh_linklists

(l1, l2)

;printf

("集合的並c:");

print_linklist

(l3)

;return0;

}

#include

#include

#include

typedef

char elem;

typedef

struct lnode

lnode;

//將結構體命名為lnode

//單鏈表初始化

intinitlist

(lnode *

&l) l -

> next =

null

;return1;

}//求單鏈表的長度

intlinklist_length

(lnode *l)

return j;

}//在第i個位置插入結點

bool

insertafter_linklist

(lnode *

&l, elem x,

int i)

if(i > n+1)

p = l;

int j;

for(j =

0; p && j < i -

1; j++

) p = p -

> next;

s =(lnode*

)malloc

(sizeof

(lnode));

if(s ==

null

)//判斷申請空間是否成功

return

false

; s -

> data = x;

s -> next = p -

> next;

p -> next = s;

return

true;}

void

del_sam

(lnode *l)

//去重

else

} p1 -

> next =

null;}

void

list_sort

(lnode *

&l) p = p-

>next;

//將p移至下乙個位置}}

}//集合並集

lnode*

mesh_linklists

(lnode *l1, lnode *l2)

//l1和l2為遞增序列,都有頭結點,將l2中的值按序插入l1中

int i =1;

p1 = l1 -

> next;

p2 = l2 -

> next;

while

(p1 && p2)

//如果l1 -> next與l2 -> next均不為空,執行迴圈

else

}//長鍊表較短鍊錶多出的部分接在l3鍊錶的後面

while

(p1)

//l1較長時

while

(p2)

//l2較長時

del_sam

(l3)

;//去除重複資料

return l3;

}//輸出線性表

如有錯誤,敬請斧正

線性表之單鏈表

cpp view plain copy linkedlist linc 2013.2.26 include include include define ok 1 define error 1 define ture 1 define false 0 struct node typedef stru...

線性表之單鏈表

零個或多個資料元素的有限序列,線性表中的元素是一對一的關係,除了第乙個元素和最後乙個元素外,其他元素都是首尾相接的。線性表有兩種儲存方式,一種是順序儲存結構,另一種是鏈式儲存結構。指用一段位址連續的儲存單元依次儲存線性表的資料元素。優點 無需為表示元素間的邏輯關係而增加額外的儲存空間 隨機查詢元素,...

線性表之單鏈表

template typenamet structnode 頭結點 如果鍊錶有頭節點,則鏈式結構中的第乙個節點稱為頭結點 其資料域可以儲存一些附加資訊,如鍊表長度 其指標域指向鍊錶中的第乙個節點。template class linklist linklist t a int n linklist ...