熟練掌握鍊錶的建立和基本操作。
問題描述:設計乙個鍊錶並實現對其進行基本操作。
基本要求:建立乙個鍊錶:
(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 單鏈表在增加和刪除上要比陣列結構更加快捷。原因 因為順序表在記憶體中是相連的,所以刪除乙個節點,在該節點之後的節點都要隨之前移,所以效率不高。而單鏈表使...