2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  數(shù)據(jù)結構課程設計</b></p><p>  計算機科學與通信工程學院</p><p><b>  姓名: </b></p><p><b>  學號:</b></p><p><b>  指導老師: </b></p&g

2、t;<p>  時間:2013-1-15</p><p><b>  目錄</b></p><p>  課程設計目的……………………2</p><p>  課程設計的要求…………………2</p><p>  課程設計具體內容………………2</p><p>  二叉排序樹………………2

3、</p><p><b>  (1)需求分析</b></p><p><b> ?。?)設計說明</b></p><p><b> ?。?)代碼</b></p><p><b>  (4)運行結果</b></p><p> ?。ǘ?/p>

4、排序………………………11</p><p><b> ?。?)需求分析</b></p><p><b> ?。?)設計說明</b></p><p><b> ?。?)代碼</b></p><p><b>  (4)運行結果</b></p>&

5、lt;p>  心得體會………………………22</p><p>  參考文獻………………………22</p><p><b>  一、課程設計目的</b></p><p>  課程設計是一種全面的綜合訓練,是課堂教學的延續(xù)。</p><p>  對學生數(shù)據(jù)結構知識的全面綜合訓練,把書上學到的知識用于解決實際問題、培養(yǎng)今

6、后軟件開發(fā)工作所需的動手實踐能力,包括問題分析、總體結構設計、用戶界面的設計、程序設計的基本技能和技巧,以及一整套軟件工作規(guī)范的訓練和團體協(xié)作精神的培養(yǎng)。</p><p><b>  二、課程設計的要求</b></p><p><b>  程序運行正確。</b></p><p>  報告要求:課程設計報告以書面形式和電子版

7、兩種形式提交。</p><p><b>  遵守誠實代碼原則。</b></p><p>  三、課程設計具體內容</p><p><b> ?。ㄒ唬┒媾判驑?lt;/b></p><p><b>  (1)需求分析:</b></p><p>  1.運行環(huán)境

8、:Microsoft Visual C++6.0</p><p>  2.程序所實現(xiàn)的功能:給出一組關鍵值,建立相應的二叉排序 樹,完成:</p><p> ?、俳Y點的刪除操作。要求可以實現(xiàn)刪除根節(jié)點,葉子節(jié)點以及其他任意節(jié)點的功能;</p><p> ?、诓迦胍粋€新結點的操作</p><p>  ③對給定的值在二叉排序樹

9、進行操作</p><p>  ④隨時顯示操作的結果</p><p><b>  (2)設計說明:</b></p><p>  1.算法設計思想:運用結構體建立二叉樹,并實現(xiàn)其各個功能。二叉排序樹的輸出用中序遍歷,則按從小到大的順序依次輸出各元素。</p><p><b>  2.流程圖:</b>&l

10、t;/p><p><b>  (3)代碼:</b></p><p>  #include<iostream></p><p>  using namespace std;</p><p>  struct BSTree</p><p><b>  {</b></

11、p><p><b>  int data;</b></p><p>  BSTree *left;</p><p>  BSTree *right;</p><p><b>  };</b></p><p>  bool flag = false;</p><

12、p>  int a[100];</p><p><b>  //查找操作</b></p><p>  BSTree *search(BSTree *r,int x)</p><p><b>  {</b></p><p>  if(r==NULL)</p><p>  

13、return NULL;</p><p><b>  else</b></p><p><b>  {</b></p><p>  if(r->data==x)</p><p><b>  return r;</b></p><p>  else

14、if(r->data>x)</p><p>  return search(r->left,x);</p><p><b>  else</b></p><p>  return search(r->right,x);</p><p><b>  }</b></p>

15、;<p>  }BSTree* insert(BSTree *r,BSTree *s) //插入操作</p><p><b>  {</b></p><p>  BSTree *p = search(r,s->data); //首先查找樹中是否已存在此節(jié)點</p><p>  if(p==NULL)</p>&

16、lt;p><b>  {</b></p><p>  if(r==NULL)</p><p><b>  {</b></p><p><b>  r=s;</b></p><p><b>  }</b></p><p>  e

17、lse if(s->data<r->data)</p><p>  r->left = insert(r->left,s);</p><p>  else if(s->data>r->data)</p><p>  r->right = insert(r->right,s);</p><

18、p><b>  }</b></p><p><b>  else</b></p><p>  flag = true;</p><p><b>  return r;</b></p><p><b>  }</b></p><p&

19、gt;  BSTree * createBSTree(BSTree *r,int *a,int n)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  BSTree * t;</p><p><b>  t = r;</b&

20、gt;</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  BSTree *s = (BSTree*)malloc(sizeof(BSTree));</p><p>  s->data=a[i];</p><p>  s-&

21、gt;left=NULL;</p><p>  s->right=NULL;</p><p>  t = insert(t,s);</p><p><b>  }</b></p><p><b>  return t;</b></p><p><b>  }&

22、lt;/b></p><p>  BSTree *getFather(BSTree *r, BSTree *s)</p><p><b>  {</b></p><p>  BSTree *sf;</p><p>  if(r==NULL||r==s)</p><p><b> 

23、 sf=NULL;</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(s==r->left||s==r->right)</p><p><b>  sf= r;</b></p&g

24、t;<p>  else if(s->data > r->data)</p><p>  sf=getFather(r->right,s);</p><p><b>  else</b></p><p>  sf=getFather(r->left,s);</p><p>&l

25、t;b>  }</b></p><p>  return sf;</p><p><b>  }</b></p><p>  BSTree * deleteNode(BSTree *r,BSTree *s) //刪除操作</p><p><b>  {</b></

26、p><p>  BSTree *temp,*father,*sf;</p><p>  sf=getFather(r,s);</p><p>  if(s->left==NULL&&s->right==NULL&&sf!=NULL) //被刪除結點是葉子結點, 不是根結點</p><p>  if

27、(sf->left==s)</p><p>  sf->left=NULL;</p><p><b>  else</b></p><p>  sf->right=NULL;</p><p>  else if(s->left==NULL&&s->right==NULL&am

28、p;&sf!=NULL) //被刪除結點是葉子結點,又是根結點</p><p><b>  r=NULL;</b></p><p>  else if(s->left==NULL&&s->right!=NULL&&sf!=NULL)</p><p>  if(sf->left==s)&

29、lt;/p><p>  sf->left=s->right;</p><p><b>  else</b></p><p>  sf->right=s->right; </p><p>  else if(s->left==NULL&&s->right!=NULL&

30、&sf==NULL) //被刪除結點有右孩子,無左孩子.刪結點是根結點</p><p>  r=s->right;</p><p>  else if(s->left!=NULL&&s->right==NULL&&sf!=NULL) //被刪結點有左孩子,無右孩子.刪結點不是根結點</p><p>  if(

31、sf->left==s)</p><p>  sf->left=s->left;</p><p><b>  else</b></p><p>  sf->right=s->left;</p><p>  else if(s->left!=NULL&&s->rig

32、ht==NULL&&sf==NULL) //被刪結點有左孩子,無右孩子.刪結點是根結點</p><p>  r=s->left;</p><p>  else if(s->left!=NULL&&s->right!=NULL)</p><p><b>  {</b></p>&l

33、t;p>  temp = s->left;</p><p>  father = s;</p><p>  while(temp->right!=NULL) //找出左子樹最大的節(jié)點</p><p><b>  {</b></p><p>  father=temp;</p><p&

34、gt;  temp=temp->right;</p><p><b>  }</b></p><p>  s->data = temp->data;</p><p>  if(father!=s)</p><p>  father->right = temp->left;</p>

35、<p><b>  else</b></p><p>  father->left=temp->left;</p><p><b>  }</b></p><p>  if(r==NULL)</p><p>  cout<<"刪除之后,二叉排序樹為空!

36、"<<endl;</p><p><b>  else</b></p><p>  cout<<"刪除成功!"<<endl;</p><p>  return r;</p><p><b>  }</b></p>&

37、lt;p>  BSTree *inorder(BSTree *r)</p><p><b>  {</b></p><p>  if (r!=NULL)</p><p><b>  {</b></p><p>  inorder(r->left);</p><p&g

38、t;  cout<<r->data<<" ";</p><p>  inorder(r->right);</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  

39、}</b></p><p>  int main(int argc,char * argv[])</p><p><b>  {</b></p><p>  int cases;</p><p>  cout<<"請輸入二叉樹個數(shù):";</p><p>

40、  cin>>cases;</p><p>  cout<<endl;</p><p>  while(cases--)</p><p><b>  {</b></p><p><b>  int n;</b></p><p>  flag = fal

41、se;</p><p>  BSTree *root=NULL;</p><p>  cout<<"請輸入元素個數(shù):";</p><p><b>  cin>>n;</b></p><p>  cout<<endl;</p><p><

42、b>  int i;</b></p><p>  cout<<"請輸入這些元素:";</p><p>  for(i=0;i<n;i++)</p><p>  cin>>a[i];</p><p>  cout<<endl;</p><p>

43、;  cout<<"建立二叉排序樹!"<<endl;</p><p>  root = createBSTree(root,a,n);</p><p>  if(root!=NULL)</p><p>  {cout<<"二叉排序樹建立成功!"<<endl<<inor

44、der(root)<<endl;}</p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"二叉排序樹建立失?。?quot;<<endl;</p><p><b>  return

45、 0;</b></p><p><b>  }</b></p><p>  cout<<"請選擇您要進行的操作(輸入括號內的字母,大小寫均可):"<<endl;</p><p>  cout<<"1.刪除(D/d)"<<endl;</p&g

46、t;<p>  cout<<"2.插入(I/i)"<<endl;</p><p>  cout<<"3.查找(S/s)"<<endl;</p><p>  cout<<"4.退出(E/e)"<<endl;</p><p>

47、<b>  char s;</b></p><p><b>  cin>>s;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(s=='E'||s=

48、='e')</p><p><b>  break;</b></p><p>  else if(s=='I'||s=='i')</p><p><b>  {</b></p><p>  cout<<"請輸入您要插入的值:&qu

49、ot;<<endl;</p><p><b>  int x;</b></p><p><b>  cin>>x;</b></p><p>  BSTree *p =(BSTree*)malloc(sizeof(BSTree));</p><p>  p->data =

50、 x;</p><p>  p->left = NULL;</p><p>  p->right = NULL;</p><p>  root = insert(root,p);</p><p>  if(flag==false)</p><p>  cout<<"插入成功!"

51、;<<endl<<inorder(root)<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"此二叉樹中已存在此值!"<<endl;</p>&

52、lt;p>  flag=false;//恢復原值</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(s=='S'||s=='s')</p><p><b>  {</b>&l

53、t;/p><p>  cout<<"請輸入您要查找的值:"<<endl;</p><p><b>  int x;</b></p><p><b>  cin>>x;</b></p><p>  BSTree *p=search(root,x);&

54、lt;/p><p>  BSTree *pfather=getFather(root,p);</p><p>  cout<<"查找的值為:"<<p->data<<endl;</p><p>  if(pfather!=NULL)</p><p>  cout<<"

55、;其父節(jié)點的值為:"<<pfather->data<<endl;</p><p><b>  else</b></p><p>  cout<<"它是根節(jié)點,沒有父節(jié)點!"<<endl;</p><p>  if(p->left==NULL&&am

56、p;p->right==NULL)</p><p>  cout<<"它是葉子節(jié)點,沒有子節(jié)點"<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p>  if(p->left !=

57、 NULL)</p><p>  cout<<"其左兒子節(jié)點的值為:"<<p->left->data<<endl;</p><p><b>  else</b></p><p>  cout<<"其左兒子節(jié)點為空!"<<endl;&l

58、t;/p><p>  if(p->right != NULL)</p><p>  cout<<"其右兒子的值為:"<<p->right->data<<endl;</p><p><b>  else</b></p><p>  cout<<

59、;"其右兒子節(jié)點為空!"<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(s=='D'||s=='d')</p><p><b>  {<

60、/b></p><p>  cout<<"請輸入您要刪除的節(jié)點的值:"<<endl;</p><p>  int value;</p><p>  cin>>value;</p><p>  cout<<"你確定要刪除嗎?(Yy/Nn)"<&l

61、t;endl;</p><p>  char order;</p><p>  cin>>order;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(order=='Y'||

62、order=='y')</p><p><b>  {</b></p><p>  BSTree * node;</p><p>  node = search(root,value);</p><p>  if(node==NULL)</p><p>  cout<<

63、"該節(jié)點不存在!"<<endl;</p><p><b>  else</b></p><p>  {BSTree *nodeDel = deleteNode(root,node);</p><p>  cout<<inorder(root)<<endl;}</p><

64、p><b>  break;</b></p><p><b>  }</b></p><p>  else if(order=='N'||order=='n')</p><p><b>  {</b></p><p><b>  

65、break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"命令不正確,請重新輸入!"<<endl;

66、</p><p>  cin>>order;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></

67、p><p><b>  {</b></p><p>  cout<<"命令有誤,請重新輸入!"<<endl;</p><p><b>  }</b></p><p>  cout<<"請選擇您要進行的操作:"<<en

68、dl;</p><p><b>  cin>>s;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  system("pause");</p><p><b&

69、gt;  return 0;</b></p><p><b>  }</b></p><p><b>  (4)運行結果</b></p><p><b>  (二)排序</b></p><p><b>  (1)需求分析:</b></p&

70、gt;<p>  1.運行環(huán)境:Microsoft Visual C++6.0</p><p>  2.程序所實現(xiàn)的功能:幾種排序算法的演示,要求給出從初始開始時的每一趟的變化情況,并對各種排序算法的排序性能作分析和比較:</p><p><b> ?、僦苯硬迦肱判颍?lt;/b></p><p><b> ?、谡郯?/p>

71、插入排序;</b></p><p><b> ?、勖芭菖判?;</b></p><p><b> ?、芎唵芜x擇排序;</b></p><p><b> ?、菘焖倥判?;</b></p><p><b> ?、薅雅判?;</b></p>

72、<p><b> ?、邭w并排序。</b></p><p><b>  (2)設計說明:</b></p><p>  1.算法設計思想:運用順序表存放數(shù)據(jù)元素,7種排序算法均為順序表類的函數(shù)。主函數(shù)中,為了避免前一個排序結果的影響,采取選擇排序算法的方法,將各個排序算法分開。</p><p><b>  

73、2.流程圖:</b></p><p><b>  ……</b></p><p><b> ?。?)代碼:</b></p><p>  #include<iostream.h></p><p>  const int maxlen=100;</p><p&g

74、t;  int num=0;</p><p>  template<class type></p><p>  class seqlist</p><p><b>  {</b></p><p><b>  public:</b></p><p><b&g

75、t;  int len;</b></p><p>  type data[maxlen];</p><p>  seqlist(void);</p><p>  ~seqlist(void);</p><p>  int length(void);</p><p>  void merge(seqlist&

76、lt;type> &sourcetable,seqlist<type> &mergedtable,const int left,const int mid,const int right);</p><p>  void insertionsort();</p><p>  type insert(const type &item,int i);

77、</p><p>  void selectsort();</p><p>  void halfsort();</p><p>  void bubblesort();</p><p>  void swap(type &a,type &b);</p><p>  void quicksort(int

78、 low,int high);</p><p>  void mergepass(seqlist<type> &sourcetable,seqlist<type> &mergedtable,const int len);</p><p>  void mergesort(seqlist<type> &table); </p&

79、gt;<p>  void print();</p><p>  void filterdown(const int start);</p><p>  void heapsort();</p><p><b>  };</b></p><p>  template<class type><

80、;/p><p>  seqlist<type>::seqlist(void):len(0){}</p><p>  template<class type></p><p>  seqlist<type>::~seqlist(void){}</p><p>  template<class type>

81、;</p><p>  int seqlist<type>::length(void)</p><p>  {return len;}</p><p>  template<class type></p><p>  void seqlist<type>::swap(type &a,type &am

82、p;b)</p><p><b>  {</b></p><p><b>  type c;</b></p><p><b>  c=a;</b></p><p><b>  a=b;</b></p><p><b>  

83、b=c;</b></p><p><b>  }</b></p><p>  template<class type></p><p>  void seqlist<type>::print()</p><p><b>  {</b></p><

84、;p>  for(int x=0;x<len;x++)</p><p>  cout<<data[x]<<" ";</p><p>  cout<<endl;</p><p><b>  }</b></p><p>  template<clas

85、s type></p><p>  void seqlist<type>::halfsort()</p><p><b>  {</b></p><p>  type temp;</p><p>  int left,right;</p><p>  for(int i=1;i&

86、lt;len;i++)</p><p><b>  {</b></p><p><b>  left=0;</b></p><p>  right=i-1;</p><p>  temp=data[i];</p><p>  while (left<=right)<

87、;/p><p><b>  {</b></p><p>  int mid=(left+right)/2;</p><p>  if (temp<data[mid])</p><p>  right=mid-1;</p><p>  else left=mid+1;</p><

88、;p><b>  }</b></p><p>  for(int k=i-1;k>=left;k--)</p><p>  data[k+1]=data[k];</p><p>  data[left]=temp;</p><p>  cout<<"第"<<++nu

89、m<<"趟折半插入排序:";</p><p>  for(int x=0;x<len;x++)</p><p>  cout<<data[x]<<" ";</p><p>  cout<<endl;</p><p><b>  }<

90、/b></p><p><b>  num=0;</b></p><p><b>  }</b></p><p>  template<class type></p><p>  void seqlist<type>::selectsort()</p>&

91、lt;p><b>  {</b></p><p><b>  int k;</b></p><p>  for(int i=0;i<len-1;i++)</p><p><b>  {</b></p><p><b>  k=i;</b><

92、;/p><p>  for(int j=i+1;j<len;j++)</p><p>  if (data[j]<data[k])</p><p><b>  k=j;</b></p><p><b>  if(k!=i)</b></p><p>  swap(dat

93、a[i],data[k]);</p><p>  cout<<"第"<<i+1<<"趟選擇排序:";</p><p><b>  print();</b></p><p><b>  }</b></p><p><b

94、>  }</b></p><p>  template<class type></p><p>  void seqlist<type>::quicksort(int low,int high)</p><p><b>  {</b></p><p>  int i=low,j=

95、high;static int a=1;</p><p>  type temp=data[low];</p><p><b>  if(i<j)</b></p><p><b>  {</b></p><p>  while(i<j)</p><p><b

96、>  {</b></p><p>  while(i<j&&temp<data[j])</p><p><b>  j--;</b></p><p><b>  if(i<j)</b></p><p><b>  {</b>&

97、lt;/p><p>  data[i]=data[j];</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  while(i<j&&temp>=data[i])</p><p><b> 

98、 i++;</b></p><p><b>  if(i<j)</b></p><p><b>  {</b></p><p>  data[j]=data[i];</p><p><b>  j--;</b></p><p><

99、b>  }</b></p><p><b>  }</b></p><p>  data[i]=temp;</p><p>  cout<<"第"<<a++<<"趟快速排序:";</p><p><b>  pr

100、int();</b></p><p>  quicksort(low,i-1);</p><p>  quicksort(i+1,high);</p><p><b>  }</b></p><p><b>  }</b></p><p>  template&l

101、t;class type></p><p>  void seqlist<type>::bubblesort()</p><p><b>  {</b></p><p><b>  int i=1;</b></p><p>  int finish=0;</p>&l

102、t;p>  while(i<len&&!finish)</p><p><b>  {</b></p><p><b>  finish=1;</b></p><p>  for(int j=0;j<len-i;j++)</p><p>  if(data[j]&g

103、t;data[j+1])</p><p>  {swap(data[j],data[j+1]);</p><p><b>  finish=0;</b></p><p><b>  }</b></p><p>  cout<<"第"<<++num<

104、<"趟冒泡排序:";</p><p>  for(int x=0;x<len;x++)</p><p>  cout<<data[x]<<" ";</p><p>  cout<<endl;</p><p><b>  i++;</b&g

105、t;</p><p><b>  }</b></p><p><b>  num=0;</b></p><p><b>  }</b></p><p>  template<class type></p><p>  void seqlist

106、<type>::merge(seqlist<type> &sourcetable,seqlist<type> &mergedtable,const int left,const int mid,const int right)</p><p><b>  {</b></p><p>  int i=left,j=m

107、id+1,k=left;</p><p>  while(i<=mid&&j<=right)</p><p>  if(sourcetable.data[i]<=sourcetable.data[j])</p><p><b>  {</b></p><p>  mergedtable.

108、data[k]=sourcetable.data[i];</p><p><b>  i++;</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  else</b></p>

109、<p><b>  {</b></p><p>  mergedtable.data[k]=sourcetable.data[j];</p><p><b>  j++;</b></p><p><b>  k++;</b></p><p><b>  }

110、</b></p><p>  if(i<=mid)</p><p>  for(int p=k,q=i;q<=mid;p++,q++)</p><p>  mergedtable.data[p]=sourcetable.data[q];</p><p>  else for (int p=k,q=j;q<=rig

111、ht;p++,q++)</p><p>  mergedtable.data[p]=sourcetable.data[q];</p><p><b>  }</b></p><p>  template<class type></p><p>  void seqlist<type>::merge

112、pass(seqlist<type> &sourcetable,seqlist<type> &mergedtable,const int len)</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  while (i+2*

113、len<=length()-1)</p><p><b>  {</b></p><p>  merge(sourcetable,mergedtable,i,i+len-1,i+2*len-1);</p><p><b>  i+=2*len;</b></p><p><b>  }

114、</b></p><p>  if (i+len<=length()-1)</p><p>  merge(sourcetable,mergedtable,i,i+len-1,length()-1);</p><p>  else for(int j=i;j<=length()-1;j++)</p><p>  mer

115、gedtable.data[j]=sourcetable.data[j];</p><p>  if(len<=length()-1)</p><p>  {if(num<length())</p><p><b>  {</b></p><p>  cout<<"第"<

116、<++num<<"趟歸并排序結果為:";</p><p>  for(int t=0;t<length();t++)</p><p>  cout<<mergedtable.data[t]<<" ";</p><p>  cout<<endl;</p>

117、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  template<class type></p><p>  void seqlist<type>::merg

118、esort(seqlist<type> &table)</p><p><b>  {</b></p><p>  seqlist<type> temptable;</p><p>  int len=1;</p><p>  while(len<table.length())<

119、;/p><p><b>  {</b></p><p>  mergepass(table,temptable,len);</p><p><b>  len*=2;</b></p><p>  mergepass(temptable,table,len);</p><p>&l

120、t;b>  len*=2;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  template<class type></p><p>  void seqlist<type>::insertions

121、ort()</p><p><b>  {</b></p><p>  type temp;</p><p><b>  int j;</b></p><p>  for(int i=1;i<len;i++)</p><p><b>  {</b>

122、</p><p>  temp=data[i];</p><p><b>  j=i;</b></p><p>  while(j>0&&data[i]<data[j-1])</p><p><b>  {</b></p><p>  data[j

123、]=data[j-1];</p><p><b>  j--;</b></p><p><b>  }</b></p><p>  data[j]=temp;</p><p>  cout<<"第"<<i<<"趟直接插入排序:&quo

124、t;;</p><p><b>  print();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  template <class type></p><p>  void seq

125、list<type>::filterdown(const int start)</p><p><b>  {</b></p><p>  int i=start,j=2*i+1;</p><p>  int tablesize=len;</p><p>  type temp=data[i];</p&

126、gt;<p>  while(j<=len-1)</p><p><b>  {</b></p><p>  if(j<len-1 && data[j]<data[j+1])</p><p><b>  j++;</b></p><p>  if(te

127、mp>=data[j])break;</p><p>  else{data[i]=data[j];i=j;j=2*j+1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  data[i]=temp;</p><p>

128、<b>  }</b></p><p>  template <class type></p><p>  void seqlist<type>::heapsort()</p><p><b>  {</b></p><p>  int tablesize=len;</

129、p><p>  for(int i=(len-2)/2;i>=0;i--)</p><p>  filterdown(i); </p><p>  for(i=len-1;i>=1;i--)</p><p><b>  {</b></p><p>  swap(data[0],

130、data[i]);</p><p><b>  len--;</b></p><p>  filterdown(0);</p><p>  cout<<"第"<<++num<<"趟堆排序結果為:";</p><p>  for(int x=0;x

131、<tablesize;x++)</p><p>  cout<<data[x]<<" ";</p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  num=0;</b></p

132、><p>  len=tablesize;</p><p><b>  }</b></p><p>  #include<iostream.h></p><p>  #include"seqlist.h"</p><p>  int main()</p>

133、<p><b>  {</b></p><p><b>  int a=1;</b></p><p>  while(a!=0)</p><p><b>  {</b></p><p><b>  int m;</b></p>&

134、lt;p>  cout<<"選擇排序類型"<<endl<<"1 冒泡排序"<<endl<<"2 快速排序"<<endl<<"3 直接插入排序"<<endl;</p><p>  cout<<"4 折半插入排序&q

135、uot;<<endl<<"5 堆排序"<<endl<<"6 選擇排序"<<endl<<"7 歸并排序"<<endl<<"0 退出排序"<<endl;</p><p>  cout<<"請選擇:";

136、</p><p>  int choice;</p><p>  cin>>choice;</p><p>  if (choice==0)</p><p><b>  {</b></p><p>  cout<<"退出"<<endl;<

137、;/p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  if(choice<0||choice>7)cout<<"請從0-7中選擇一個正確的數(shù)字完成排序!"<<endl;</p><p>

138、<b>  else</b></p><p><b>  {</b></p><p>  seqlist<int> be;</p><p>  cout<<"輸入待排序數(shù)的總個數(shù):";</p><p><b>  cin>>m;<

139、;/b></p><p>  cout<<"輸入待排序數(shù),用空格隔開:";</p><p>  for(int i=0;i<m;i++)</p><p>  cin>>be.data[i];</p><p><b>  be.len=m;</b></p>

140、<p>  switch(choice)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  cout<<"冒泡排序:"<<endl;</p><p>  be.bubblesor

141、t();</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  cout<<"快速排序:"<<endl;</p><p>  be.quicksort(0,m-1);</p>

142、<p><b>  break;</b></p><p><b>  case 3:</b></p><p>  cout<<"直接插入排序:"<<endl;</p><p>  be.insertionsort();</p><p><

143、b>  break;</b></p><p><b>  case 4:</b></p><p>  cout<<"折半插入排序:"<<endl;</p><p>  be.halfsort();</p><p><b>  break;</b

144、></p><p><b>  case 5:</b></p><p>  cout<<"堆排序:"<<endl;</p><p>  be.heapsort();</p><p><b>  break;</b></p><p&

145、gt;<b>  case 6:</b></p><p>  cout<<"選擇排序:"<<endl;</p><p>  be.selectsort();</p><p><b>  break;</b></p><p><b>  case

146、7:</b></p><p>  cout<<"歸并排序:"<<endl;</p><p>  be.mergesort(be);</p><p><b>  break;</b></p><p><b>  }</b></p>

147、<p><b>  }</b></p><p><b>  }</b></p><p>  return 0;</p><p><b>  }</b></p><p><b> ?。?)運行結果</b></p><p>

148、<b>  四、心得體會</b></p><p>  剛開始做課程設計的時候認為這個很簡單,書上大部分的代碼都有,直接輸入到電腦里就可以運行了。但是做起來遠比想象的復雜,因為c++學完半年,許多基礎知識都忘了,只好重新拾起一些零碎的知識點慢慢改錯。</p><p>  我選的兩個題目分別是排序和二叉排序樹。二叉排序樹比較簡單,只要建立一個二叉樹并按順序存入即可,再根據(jù)

149、二叉樹特點進行插入、刪除和查找,然后用中序遍歷將其輸出。排序則比較復雜,每一個排序算法共用一個順序表類,很容易出錯,而且剛開始的錯相當多,通過請教老師以及和同學討論才一步步的將程序調試好。</p><p>  總之,這一周的課程設計,不僅讓我重拾了c++的一些知識點,而且鞏固了這學期的數(shù)據(jù)結構知識,收獲很大。即使其間錯誤多到差點放棄,但運行結果出來的時候一切都很值得!</p><p>&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論