一、實驗目的
鞏固線性表的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。
二、實驗內容
建立乙個由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 學...