資料結構 建立學生成績的雙鏈表(實驗2 3)

2021-08-09 02:06:22 字數 3233 閱讀 3867

一、實驗目的

鞏固線性表的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。

二、實驗內容

建立乙個由n個學生成績的順序表,n的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入、刪除、查詢等操作。分別輸出結果。

三、實驗步驟

1、依據實驗內容分別說明實驗程式中用到的資料型別的定義

public:

dll();

dll(t score, int n); //有參建構函式

~dll(); //析構函式

int length(); //返回單鏈表長度

void insert(int i, t x); //插入操作,在位置i插入元素

t get(int i); //按位查詢

int locate(t x); //按值查詢

t delete(int i); //刪除操作

void print(); //遍歷操作

private:

node*first; //雙鏈表的頭指標

int length; //鏈的長度計數

2、相關操作的演算法表達

在**中設定元素為float型,有8個元素。定義順序表的資料型別——雙鏈錶類dll,包括插入、刪除、查詢、輸出等基本操作。

插入操作:1.工作指標p,s初始化;

2.查詢第i-1個結點並使工作指標p指向該節點;

3.若查詢不成功,說明插入位置不合理,丟擲插入位置非法;

否則,3.1 生成乙個元素值為x的新結點s;

3.2  將新結點插入到結點p之後(與單鏈表有所不同);

刪除操作:1.工作指標p初始化,累加器count初始化;

2.查詢第i-1個結點並使工作指標p指向該節點;

3.若p不存在或p的後繼結點不存在,丟擲插入位置非法;

否則,3.1 暫存被刪結點和被刪元素值;

3.2  摘鏈,將結點p的後繼結點從鍊錶上摘下;

3.3  釋放被刪結點

3.4  返回被刪元素值

查詢操作:(1)按位查詢

1.工作指標p初始化,累加器count初始化;

2.從頭指標出發順next域逐個結點往下搜尋直到某個結點,判斷是否為第i個結點。

3. 若是,則查詢成功;否則將工作指標p後移;

(2)按值查詢

1.工作指標p初始化,累加器count初始化;

2.對單鏈表中各元素依次進行比較。查詢成功則返回元素序號;否則,返回0表示查詢失敗;

輸出操作:1.工作指標p初始化;

2.重複執行下述操作,直到p為空:

2.1 輸出結點p的資料域;

2.2工作結點p後移

由於結點元素型別不確定,因此採用c++模板機制。

源**如下:

#includeusing namespace std;

template class node

;template class dll ;

template dll::dll(t score, int n)

}template dll::~dll()

delete first;

}templateint dll::length()

return length;

}template void dll::insert(int i,t x)

if(p==null) throw"位置";

else }

template t dll::get(int i)

if (p == null)throw"位置非法";

else return p->data;

}template int dll::locate(t x)

return 0;

}template t dll::delete(int i)

if (p == null || p->next == null) throw"位置非法";

else

}p->next = q->next;

delete q;

q = null;

return x; }}

template void dll::print()

cout << p->data << endl;

}void main()

; dllstudent(score, 8);

cout << " 學生資料結構成績" << endl;

student.print();

cout << endl << endl << "在位置3插入成績78,插入後結果如下:" << endl;

student.insert(3,66);

student.print();

cout << endl << endl << "在位置2刪除成績為:" << student.delete(2) <

student.print();

cout << endl << endl << "位置3的成績為:" << student.get(3) << endl;

cout << endl << endl << "成績32.5所在位置為:" << student.locate(32.5) << endl;

}

3、總結、執行結果和分析

①總結在程式內規定成績陣列型別為float型,陣列共有8個元素。 float score[8] = ;

定義了類模板的物件。 dllstudent(score, 8);

通過呼叫成員函式,實現輸出、插入、查詢、刪除等基本功能。

②執行結果如下:

③分析雙鏈表的每個資料結點中都有兩個指標

,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。在雙鏈表中求表長、查詢、遍歷等操作的實現與單鏈表基本相同,只有插入、刪除有所不同。由於迴圈雙鏈表是一種對稱結構,在結點p之前或之後的插入和刪除非常容易。

4、總體收穫和不足,疑問等

之所以說「實踐是檢驗真理的唯一標準」,這句話是很對的。在課堂上短短的學習時間,並不能很好地對所學知識有很好的理解,相反,我們更需要在課後多花時間上機實驗,才能更大程度地掌握所學知識的原理。

通過本次實驗,我也加深了對雙鏈表相關功能操作的理解。但我還需花更多的時間來學習這門課程。

學生成績雙鏈表

include using namespace std template class student class node template class student class dll template class student dll dll student score,int n temp...

建立學生成績的單鏈表

一.實驗目的 鞏固線性表的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。二.實驗內容 通過單鏈表建立乙個由n個學生成績的順序表,n的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入 刪除 查詢等操作。分別輸出結果。三.源 includeus...

初試資料結構 學生成績問題

問題描述 有n名學生,每個學生的屬性包括姓名與總成績。已知學生的姓名與總成績,你的任務是將學生的資訊按照以下方式排序 首先比較總成績,總成績高的在前面,總成績低的在後面,當總成績相同時,你要比較學生的姓名,姓名字典序小的同學在前面,姓名字典序大的同學在後面 ascii碼順序 n的範圍是1 100 學...