資料結構和演算法 線性表(鏈式儲存)

2021-10-04 19:14:07 字數 4112 閱讀 1157

線性表是最常見和常用的adt。假設線性表的元素為整數,請基於單鏈式儲存結構實現線性表adt。

基本功能包括:

(1)建立線性表;

輸入有兩行:第一行乙個整數,是輸入元素的結束標誌,例如0,則在輸入結束時輸入0,就表示輸入結束了。第二行是線性表的各個元素,最後乙個是結束標誌。

(2)插入:

輸入兩個整數,即元素插入的位置和元素值

(3)刪除:

輸入乙個整數,即要刪除的元素值

(4)搜尋:

輸入乙個整數,即要搜尋元素的值

(5)輸出:

輸出線性表的各個元素,空格分開。

(6)集合的並運算:

輸入建立第二個集合(線性表),完成並運算

(7)集合的交運算:

輸入建立第二個集合(線性表),完成交運算

(8)合併兩個有序線性表:

兩個有序線性表,合併後仍然有序

測試樣例:

0 //線性表輸入結束標誌

1 3 5 7 9 0 //線性表a的各個元素,最後是結束標誌

2 10 //表示在第2個位置插入10

10 //表示刪除值=10的資料元素

9 //查詢元素9

22 // 查詢元素22

0 //線性表輸入結束標誌

1 2 3 4 5 6 0 //線性表b的各個元素,最後是結束標誌

例如:輸入

013

5790

210109

22012

3456

0

result

a is created as:13

579after inserted a is 1103

579 after deleted a is 135

799 is located at index of 5

22 is not found

b is created as:12

3456

a cross b is 135

a union b is 135

7924

6a union b in sequence is 123

4567

9

#include

#include

using

namespace std;

typedef

struct node

node;

class

list

;list::

list()

head-

>next=

null

; len=0;

}void list::

create

(int tag)

t->data=v;

p->next=t;

p=t;

len++

;scanf

("%d"

,&v);}

p->next=

null;}

void list::

insert

(int index,

int x)

node *p;

int i=0;

p=head;

while

(p->next!=

null

&&i<=index-2)

node *t=

new node;

t->data=x;

t->next=p-

>next;

p->next=t;

len++;}

void list::

delete

(int x)

}printf

("找不到元素!\n");

}void list::

find

(int x)

p=p-

>next;

}printf

("%d is not found\n"

,x);

}void list::

show()

printf

("\n");

}void list::

cross

(list a,list b)

t1=t1-

>next;}}

void list::

union

(list a,list b)

if(t2==

null

)insert

(len+

1,t1-

>data)

; t1=t1-

>next;

} t2=b.head-

>next;

while

(t2!=

null)if

(t1==

null

)insert

(len+

1,t2-

>data)

; t2=t2-

>next;}}

void list::

merge

(list a,list b)

else

if(t1-

>data>data)

else

}while

(t1!=

null

)while

(t2!=

null)}

intmain()

實習目的:熟練掌握鍊錶的建立及基本操作

問題描述:

1)實現鍊錶的排序(公升序)

2)實現兩個有序鍊錶的合併:a=a∪b,要求合併後仍然有序。

提交前請將所有的提示資訊去掉,只保留最後的輸出結果。例如執行時:從鍵盤直接輸入:

2 1 2

3 1 2 3

輸出結果為:12

3分別表示第乙個鍊錶元素個數為2,元素分別為 1,2 ;第二個鍊錶元素個數為3,元素分別為1,2,3。

例如:輸入

221

3123

result

1

23

#include

#include

#include

using

namespace std;

typedef

struct node

node;

class

list

;list::

list()

head-

>next=

null

; len=0;

}void list::

create

(int l)

p->next=

null;}

void list::

insert

(int index,

int x)

int i=0;

node *p;

p=head;

while

(p->next!=

null

&&i<=index-2)

node *t=

new node;

t->data=x;

t->next=p-

>next;

p->next=t;

len++;}

void list::

ascendsort()

t1=t1-

>next;}}

void list::

show()

}void list::

merge

(list a,list b)

else

if(t1-

>data>data)

else

}while

(t1!=

null

)while

(t2!=

null)}

intmain()

資料結構與演算法 線性表鏈式儲存(單鏈表)

今天總結單鏈表的實現.什麼是鍊錶?就是採去鏈式儲存結構的線性表,所謂鏈式儲存就好比火車的車廂一樣,一節一節的連線起來,成為乙個線性表。這種方式採用動態儲存分配方式,即程式在執行時根據實際需要申請記憶體空間,不需要時將記憶體空間釋放掉。鍊錶用一組任意的儲存單元存放線性表中的各個元素,這組儲存單元可以是...

資料結構 線性表鏈式儲存

對於線性鍊錶,有兩種表示方法,一種是包含頭節點的情況,如下圖 一種是不包含頭節點的情況,如下圖 本文中對線性鍊錶的表示,利用的是帶頭節點的定義方式。使用c 實現了線性鍊錶建立,初始化,刪除,插入,清空,遍歷,有序鍊錶合併等操作。煉表頭 頭指標 頭結點 煉表頭 指的是線性表第乙個元素所在結點 頭指標 ...

資料結構 線性表(鏈式儲存)

1 順序表 需要一片連續的記憶體空間,成員可以隨機訪問,訪問效率高 插入刪除資料存在資料搬移的現象,效率低 儲存密度高 鍊錶的特點 不需要連續的記憶體空間,不能隨機訪問元素,訪問效率低 插入刪除資料不存在資料搬移的現象,效率高 儲存密度比較低 2 無頭鍊錶 第乙個節點為資料節點,加入刪除第乙個節點,...