鍊錶的實現

2021-08-19 22:21:39 字數 3633 閱讀 3203

熟練掌握鍊錶的建立和基本操作。

問題描述:設計乙個鍊錶並實現對其進行基本操作。

基本要求:建立乙個鍊錶:

(1)輸入資料;

(2)實現資料的插入、刪除、搜尋、輸出等基本操作;

(3)實現集合的並、交和兩個有序鍊錶的合併。

#include

#include

using namespace std;

template

//結點類的定義

struct linknode //附加頭結點的建構函式

linknode(t &x,linknode

*ptr=

null) //節點的建構函式

};template

//鍊錶的定義

class list //first指向附加頭結點的位址(建構函式)

list(t &x) //first指向首節點的位址(建構函式)

list(const list

& l); //複製建構函式

list

& operator=(list

&l); //賦值函式

~list() //析構函式

linknode

*gethead() const //返回頭節點

void makeempty(); //將表置為空表

bool isempty() const //判表空

bool isfull() const //判表滿(表一般不會出現滿的情況

int length() const; //計算表的長度

linknode

*search(t &x)const; //搜尋含資料x的元素位址

linknode

*locate(int i)const; //搜尋第i個元素的位址

bool getdata(int i,t&x)const; //取出第i個元素

bool setdata(int i,t &x); //用x修改第i個元素的值

bool insert(int i,t &x); //在第i個元素後插入x

bool remove(int i); //刪除第i個元素

void union(list

l1,list

l2); //實現兩個鍊錶的並集

void intersection(list

l1, list

l2); //實現兩個鍊錶的交集

void union1(list

l1,list

l2); //實現兩個有序鍊錶的合併

void sort(list

l1); //進行排序

void samedel(); //刪除相同的元素

void jose(int n,int s,int m); //josephus問題的求解

void input(); //輸入函式

void output(); //輸出函式

};template

list

::list(const list

&l)

cpp->

link

=null;

}template

void

list

::makeempty()

}template

int list

::length()const

return count;

}template

linknode

*list

::search(t &x)const

return p;

}template

linknode

*list

::locate(int i)const

return p;

}template

bool list

::getdata(int i,t&x) const

template

bool list

::setdata(int i,t&x)

template

bool list

::insert(int i,t &x)

template

bool list

::remove(int i)

template

void

list

::output()

cout<}template

void

list

::input()

last->

link

=null;

}template

void

list

:: union(list

l1,list

l2)

}if(l1.length()==

0) cout<<

"並集為空集";

else

}template

void

list

::intersection(list

l1,list

l2)

else i++;

}if(l1.length()==

0) cout<<

"交集為空集"

}template

void

list

::sort(list

l1)

p=p->

link;}}

cout<<

"排序後的鍊錶為:";

l1.output();

}template

void

list

::union1(list

l1,list

l2)}

cout<<

"有序表合併後";

l1.sort(l1);

}template

void

list

::samedel()

else i++;

}cout<<

"刪除相同的元素後表的內容為:"

output();

}template

void

list

::jose(int n,int s,int m)

last->

link

=first->

link;

if(m!=

0)

q->

link

=p->

link;

delete p;

p=q->

link;

}cout<<

"最後的贏家是:"

<

data

<}

else

cout<<

"最後的贏家是:"

<

data

<}int main()

鍊錶的實現

鍊錶是一種非常重要的資料結構,比起陣列來雖然操作繁瑣,查詢效率也不如陣列效率高,但在進行插入刪除操作時,鍊錶具有陣列無法比擬的效率,下面的 是鍊錶的實現 include include include define n 100 typedef struct node link link node i...

鍊錶的實現

include using namespace std template class linklist node head public linklist t a,int n 0 利用尾插法來構建線性鍊錶 linklist bool isempty 不為空,則返回0,為空則返回非0 t getnod...

鍊錶的實現

記憶體結構 鍊錶也是資料結構的一種,但是和陣列不一樣,陣列在記憶體中每個節點的位置是相連的。而鍊錶的每個節點在物件中是分散的,依靠引用相連。優點1 單鏈表在增加和刪除上要比陣列結構更加快捷。原因 因為順序表在記憶體中是相連的,所以刪除乙個節點,在該節點之後的節點都要隨之前移,所以效率不高。而單鏈表使...