順序表(SeqList)


---恢復內容開始---

  數據結構在上周結課,接下來就是為期幾周的上機實驗,說是實驗課我感覺還不如不上。幾乎每個人都是按着老師的要求把書上的代碼打一遍,變都不變。一遍以后連自己打的什么都不知道。

與其說是實驗課,我感覺不如叫它打字練習課。

  老師做的並沒錯,錯的是學生對於這節課的態度,老師已經把該講的講過了,而上機就是學生們自己領悟的過程,對於代碼不能打一遍就是一遍過去了。要在打的過程中了解你所打的每一句

代碼是干什么的、在函數中起到的是什么作用,而這個函數在整個程序中起到的又是什么作用。所以我寫這篇博客,是我離開書本自己去嘗試打第二次,試着去回憶,試着去自己坐。而后的注釋

是第三次去看這段代碼,自己加上去的,然后再與書本對照,看看自己想法上面的錯誤。

  之前聽好多人對我說,數據結構是編程最重要的基本功沒有之一!而我認為:當你在考慮學一個東西值不值得學的時候,你應該去把它學了,不然往往會后悔。通過這個學期的學習,我也能

體會到數據結構的重要性。數據結構是基礎,數據結構之於編程就像加減乘除之於數學,所以要把他作為我學習的重中之重。

① 頭文件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.h

②成員函數定義文件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 } 
SeqLis.cpp

③主函數文件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 }
SeqList_main.cpp

運行結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM