---恢復內容開始---
數據結構在上周結課,接下來就是為期幾周的上機實驗,說是實驗課我感覺還不如不上。幾乎每個人都是按着老師的要求把書上的代碼打一遍,變都不變。一遍以后連自己打的什么都不知道。
與其說是實驗課,我感覺不如叫它打字練習課。
老師做的並沒錯,錯的是學生對於這節課的態度,老師已經把該講的講過了,而上機就是學生們自己領悟的過程,對於代碼不能打一遍就是一遍過去了。要在打的過程中了解你所打的每一句
代碼是干什么的、在函數中起到的是什么作用,而這個函數在整個程序中起到的又是什么作用。所以我寫這篇博客,是我離開書本自己去嘗試打第二次,試着去回憶,試着去自己坐。而后的注釋
是第三次去看這段代碼,自己加上去的,然后再與書本對照,看看自己想法上面的錯誤。
之前聽好多人對我說,數據結構是編程最重要的基本功沒有之一!而我認為:當你在考慮學一個東西值不值得學的時候,你應該去把它學了,不然往往會后悔。通過這個學期的學習,我也能
體會到數據結構的重要性。數據結構是基礎,數據結構之於編程就像加減乘除之於數學,所以要把他作為我學習的重中之重。
① 頭文件SeqList.h:

1 //#ifndef SeqList_H 避免重復包含SeqList.h頭文件 但是在Dec-C++中不能用 2 #define SeqList_H 3 const int MaxSize=15; //該線性表最多有15個元素 4 5 class SeqList 6 { 7 public: 8 SeqList(){length=0;} //無參構造函數 9 SeqList(int a[],int n); //有參構造函數 10 ~SeqList(){} //析構函數 11 void Insert(int i,int x); //在表的第i個位置插入之為x的元素 12 int Delete(int i); //刪除第i個元素 13 int Locate(int x); //求值為x的元素在線性表中的位置 14 void PrintList(); //按序號依次輸出各元素 15 private: 16 int data[MaxSize]; //存放數據元素的數組 17 int length; //線性表的長度 18 };
②成員函數定義文件SeqList.cpp:

1 #include<iostream> 2 using namespace std; 3 #include"SeqList.h" //引入在.h文件中類的聲明 4 5 SeqList::SeqList(int a[],int n) 6 { 7 if(n>MaxSize) throw "參數非法"; //元素的數量要小於MaxSize 8 for(int i=0;i<n;i++) 9 data[i]=a[i]; 10 length=n; 11 } 12 void SeqList::Insert(int i,int x) 13 { 14 if(length>=MaxSize) throw "上溢"; 15 if(i<1||i>length+1) throw "位置非法"; 16 for(int j=length;j>=i;j--) //將第j個元素存在數組下標為j-1處; 17 data[j]=data[j-1]; 18 data[i-1]=x; 19 length++; 20 } 21 int SeqList::Delete(int i) 22 { 23 if(length==0) throw "下溢"; 24 if(i<1||i>length) throw "位置非法"; 25 int x=data[i-1]; 26 for(int j=i;j<length;j++) 27 data[j-1]=data[j]; 28 length--; 29 return x; 30 } 31 int SeqList::Locate(int x) 32 { 33 for(int i=0;i<length;i++) 34 if(data[i]==x) return i+1; //下標為i的元素的序號為i+1 35 return 0; //找不到值為x的元素 36 } 37 void SeqList::PrintList() 38 { 39 for(int i=0;i<length;i++) 40 cout<<data[i]<<" "; 41 cout<<endl; 42 }
③主函數文件SeqList_main.cpp:

1 #include<iostream> 2 using namespace std; 3 #include"SeqList.h" //引入在.h文件中類的聲明 4 5 int main() 6 { 7 int r[10]={5,7,2,0,1,5,1,0,0,7}; //老師要求將學號存入線性表 8 SeqList L(r,10); 9 cout<<"執行插入操作前數據為:"<<endl; 10 L.PrintList(); 11 try 12 { 13 L.Insert(2,3); //在第2個位置插入值為3的元素 14 } 15 catch (char *s) 16 { 17 cout<<s<<endl; 18 } 19 cout<<"執行插入操作后數據為:"<<endl; 20 L.PrintList(); //輸出所有元素 21 cout<<"值為3的元素位置為:"; 22 cout<<L.Locate(3)<<endl; 23 cout<<"執行刪除第一個元素操作,刪除前數據為:"<<endl; 24 L.PrintList(); 25 try 26 { 27 L.Delete(1); //刪除第1個元素 28 } 29 catch(char *s) 30 { 31 cout<<s<<endl; 32 } 33 cout<<"刪除后數據為:"<<endl; 34 L.PrintList(); 35 return 0; 36 }
運行結果: