《C 語言基礎》實踐參考 鍊錶類

2021-07-02 20:55:53 字數 2721 閱讀 5676

返回:賀老師課程教學鏈結

專案要求

【專案 - 鍊錶類】

動態鍊錶也是程式設計中的一種非常有用的資料結構。可以說,是否能夠理解有關操作的原理,決定了你是否有資格稱為「科班」出身。在後續的專業基礎課中,相關的內容還會從不同的角度,反覆地認識,反覆地實踐。不過,在現階段多些體驗,也是很有必要的了。

(1)閱讀下面的程式,回顧一下動態鍊錶,閱讀程式過程中,請用筆畫一畫形成鍊錶的過程中指標值的變化。

#include using namespace std;

struct student

;int main( )

//輸出動態鍊錶

p=head;

while(p!=null)

return 0;

}

(2)請在下面已有**的基礎上完善程式,完成動態鍊錶的簡單操作,程式執行的截圖供參考。

class student  //結點類

~student();

student *next; //指向下乙個結點

int num;

double score;

};class mylist //鍊錶類,其中的成員是學生

mylist(int n,double s); //以student(n,s)作為單結點的鍊錶

~mylist();

int display(); //輸出鍊錶,返回值為鍊錶中的結點數

void insert(int n,double s); //插入:將student(n,s)結點插入鍊錶,該結點作為第乙個結點

void cat(mylist &il); //將鍊錶il連線到當前物件的後面

int length(); //返回鍊錶中的結點數(另一種處理,可以將結點數,作為乙個資料成員)

private:

student *head; //鍊錶的頭結點

};//以下為類成員函式的定義

……//測試函式

[參考解答]

#includeusing namespace std;

class student //結點類

~student()

;student *next; //指向下乙個結點

int num;

double score;

};class mylist //鍊錶類

mylist(int n,double s); //以student(n,s)作為單結點的鍊錶

~mylist();

int display(); //輸出鍊錶,返回值為鍊錶中的結點數

void insert(int n,double s); //插入:將student(n,s)結點插入鍊錶,該結點作為第乙個結點

void cat(mylist &il); //將鍊錶il連線到當前物件的後面

int length(); //返回鍊錶中的結點數

private:

student *head; //鍊錶的頭結點

};mylist::mylist(int n,double s)

mylist::~mylist()

head = null;

}int mylist::display()

int cnt=0;

student *pt=head;

while(pt)

return cnt;

}void mylist::insert(int n, double s)

pts->next=pt;

}}void mylist::cat(mylist& il)

}int mylist::length()

return cnt;

}int main()

cout<

[以下參考解答略]

(3)上面的結點,只處理包含包含學號和分數的學生資訊。如何將之用於其他應用場合?結點類students也可換作其他類。請設計建立乙個動態鍊錶,其中有5個結點,分別描述5個三角形,從頭結點開始,逐個輸出三角形的資訊。

(4)上面的處理,仍然不夠抽象,所以,只能就事論事地做,這是設計的大忌。實際上,結點的型別可以定義為以下模板類:

template class node

;

這樣,「一勞永逸」地解決了data的型別,只要在定義類時,對t進行例項化即可。在這裡,t型別中也不需要涉及有關鍊錶中指標的內容。

請按這種思路重寫程式,為了測試,在main()函式中建立乙個myarray型物件進行測試。另外,再建立乙個myarray型物件進行測試(********為自定義三角形類)。

(5)本專案實現的是最簡單的單向鍊錶中的最基本的操作。從鍊錶的型別上,還可以有雙向鍊錶(有頭結點和尾結點,方便從前往後和從後往前的訪問)、十字鍊錶等,類似的方法可以構造二叉樹、多叉樹、圖(例如,計算機網路結構可以抽象描述為圖,社交網路中使用者的關係也是圖,頂有用的結構)。從操作角度,單鏈表在插入時,可以讓結點保持有序;可以從鍊錶中查詢元素;很多的應用中涉及的演算法需要借助於資料結構和演算法的設計獲得最佳的處理效能。關於這方面的內容不再以具體任務的形式給出,在後續的專業基礎課中將會逐漸引出。另外,有程式設計基礎,同學們是可以自己往前走一走,找相關的教材和書籍(資料結構、演算法類)看一看,是否能依靠自己的力量往前走一走了。

《C 語言基礎》實踐參考 方程也是類

返回 賀老師課程教學鏈結 專案要求 專案5 方程也是類 設計一元一次方程類,求形如ax b 0的方程的解。例如 輸入3x 8 0時,輸出的方程的解為x 2.66667 再如 輸入5s 18 0時,輸出的方程的解為s 3.6 參考介面如下 參考 為 class cequation int main c...

《C 語言基礎》實踐參考 我的向量類

返回 賀老師課程教學鏈結 專案要求 專案4 我的向量類 建立乙個向量類myvector,宣告如下,請完成類的定義 class myvector 定義向量類 int main myvector myvector int m ostream operator ostream output,const m...

《C 語言基礎》實踐參考 我的陣列類

返回 賀老師課程教學鏈結 專案2 我的陣列類 下面的程式,因為存在指標型別的資料成員,需要能完成深複製的建構函式。請補充完整建構函式和析構函式 其他不必動 其中,建構函式要完成下面三個任務 1 為各成員函式賦值,按照深複製原則,其中arrayaddr應該是為儲存資料新分配的連續空間的首位址 2 my...