一.實驗目的
鞏固間接定址的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。
二. 實驗內容
建立乙個由n個學生成績的順序表,n的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入、刪除、查詢等操作。用間接定址來實現,分別輸出結果。
為了以後的對**的修改、優化和復用,這裡採用了c++中的模板來實現,下面是模板的實現。
indirectaddress.h
#ifndef indirectaddress_h
#define indirectaddress_h
#include
using
namespace
std;
const
int maxsize = 100;
template
struct node ;
template
class indirectaddress ;
#endif /* indirectaddress_h */
indirectaddress.cpp
#include "indirectaddress.h"
template
indirectaddress::indirectaddress()
template
// 尾插法
indirectaddress::indirectaddress(datatype a, int n)
r -> next = null; // 單鏈表建立完畢,將終端結點的指標域置空
}template
int indirectaddress::length()
template
datatype indirectaddress::get(int i)
return address[i - 1] -> data;
}template
datatype indirectaddress::locate(datatype x)
p = p -> next;
count++;
}return -1;
}template
void indirectaddress::insert(int i, datatype x)
node*tempnode ;
tempnode = new node;
tempnode -> data = x;
tempnode -> next = p -> next;
p -> next = tempnode;
length++;
// 順序表的插入
if (length >= maxsize)
for (int j = length - 1; j > i - 1; j--)
address[i - 1] = tempnode;
}template
datatype indirectaddress::delete(int i)
node*tempnode;
tempnode = new node;
tempnode = p -> next;
x = tempnode -> data;
p -> next= tempnode -> next;
delete tempnode;
length--;
// 順序表操作
address[i - 1] = null;
for (int j = i - 1; j <= length; j++)
return x;
}template
void indirectaddress::printlist()
cout
<< endl;
}template
indirectaddress::~indirectaddress()
length = 0;
}
間接定址模板借鑑了前面單鏈表模板和順序表模板,將二者合在了一起。接下來就是測試模板,這裡依然是用實驗題目的成績表基本操作。
main.cpp
#include
#include "indirectaddress.cpp"
int main(int argc, const
char * argv) ;
indirectaddress list(score, 5);
cout
<< "遍歷學生分數"
<< endl;
list.printlist();
cout
<< "讀取第三個學生的分數"
<< endl;
cout
<< list.get(3) << endl;
cout
<< "在第二個位置插入學生分數 95"
<< endl;
list.insert(2, 95);
list.printlist();
cout
<< "80分在分數表中的位置為: "
<< list.locate(80) << endl;
cout
<< "該分數表長度為: "
<< list.length() << endl;
cout
<< "刪除第3個分數"
<< endl;
list.delete(3);
list.printlist();
return
0;}
執行結果如下:
三. 總結和心得
在寫了鍊錶和順序表的模板後,寫間接定址的模板比前面輕鬆了許多,主要是將兩種模板的有點結合在一起。在按位查詢時省力很多,但是犧牲了插入和刪除這兩個小功能的效能,**也相對比較多。
順序表的實現這裡就不重複了,在上一次實驗中我寫了順序表的模板,這個實驗題目只需要使用上次的模板,修改一下資料即可。用c++來實現線性表這五種方法,主要是寫模板,模板寫好了之後,在以後的復用中就十分方便。
在編碼的時候在適合的地方還是需要適當加點注釋,時間過久了,閱讀起來還是有點吃力的。畢竟現在**並不難寫,在平時敲**時候,應該是在保證**的閱讀順帶實現一下功能,這樣在以後的維護和優化中起到很好的幫助。
間接定址的基本及其應用 實驗2 4
一 實驗目的 鞏固間接定址的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。二.實驗內容 建立乙個由n個學生成績的順序表,n的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入 刪除 查詢等操作。用間接定址來實現,分別輸出結果。include ...
間接定址儲存的線性表 基本操作實現
目的 通過實際操作間接定址儲存的單鏈表,掌握間接定址儲存單鏈表的儲存結構以及驗證其操作的實現並進一步理解演算法與程式的關係。內容 建立間接定址儲存的單鏈表並對已建立的單鏈表實現插入 刪除 查詢等基本操作。間接定址j簡介 將陣列和指標結合起來的一種方法,它將陣列中儲存資料元素的的單元改為儲存指向改元素...
實驗三 順序棧的基本操作實現及其應用
1 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2 學會使用棧和佇列解決實際問題。二 實驗內容 棧的壓棧和出棧操作。三 include using namespace std const int stacksize 20 陣列長度為20 templateclass seqs...