一、 要求完成時間
實驗開始後的第四周之前完成
二、 實驗目的
1、 掌握有序鍊錶的基本操作:插入、刪除、查詢。
2、 掌握鍊錶遍歷器的使用方法。
三、 實驗內容
輸入n個不為零的整數作為節點元素值,遇到0代表輸入結束(不建立元素值為0的節點),建立有序鍊錶。輸出整個鍊錶。
輸入乙個整數,將該數插入到有有序鍊錶相應位置。輸出整個鍊錶。
輸入乙個整數,在鍊錶中進行搜尋,輸出其在鍊錶中的第乙個出現的位置。如果不存在輸出0。
再一次輸入乙個整數,在鍊錶中進行搜尋,輸出其在鍊錶中的第乙個出現的位置。如果不存在輸出0。
再一次輸入n個不為零的整數作為節點元素值,遇到0代表輸入結束(不建立元素值為0的節點),建立乙個新的有序鍊錶。輸出整個鍊錶。
使用鍊錶遍歷器實現上面兩個有序鍊錶的合併,輸出合併後的有序鍊錶。
這個實驗的程式最容易出現執行結果不穩定情況,也容易出現死迴圈或者不正常退出的情況,造成的原因大多是使用的非法記憶體,也就是乙個變數沒有賦值就直接引用,例如下面的引用就會造成非法引用。
chainnode *y1 = new chainnode
; y1->data = x;
chainnodey2
y2=y1->link;
//y1->link沒有賦值,y2就指向乙個隨時位置
cout << y2->data<< endl;
//這句話就會輸出乙個不確定數值。
y2->data=123;
//這句話就在給乙個不去確定的記憶體賦值,造成系統嚴重錯誤。
//正確做法是申請到節點後,一定要給裡面的指標賦值為空:
chainnode *y1 = new chainnode
; y1->link = null;
#include
using
namespace std;
class
chain
;class
chainnode
;class
chain
chain &
merge
(chain &x)
; chain &
(int a)
;void
output
(ostream& out)
; chain &
insert
(int i,
int x)
;int
find
(int x)
; chain &
reverse()
;private
: chainnode *first;};
chain & chain::
reverse()
b->link = a;
first-
>link = b;
}else
}else
return
*this;}
//合併
chain & chain::
merge
(chain &x)
else
}else
else}}
return
*temp1;
}chain & chain::
(int a)
if(current-
>link)
else
}else
return
*this;}
chain & chain::
insert
(int i,
int x)
newnode-
>link = current-
>link;
current-
>link = newnode;
return
*this;}
int chain::
find
(int x)
else}if
(current)
else
}void chain::
output
(ostream& out)
out << current-
>data << endl;
}ostream&
operator
<<
(ostream& out, chain& x)
intmain()
cout <<
"output1"
<< endl;
cout <<
*temp;
cout <<
"input2"
<< endl;
cin >> a;
*temp = temp-
>
(a);
cout <<
"output2"
<< endl;
cout <<
*temp;
cout <<
"input3"
<< endl;
cin >> a;
cout <<
"output3"
<< endl;
cout << temp-
>
find
(a)<< endl;
cout <<
"input4"
<< endl;
cin >> a;
cout <<
"output4"
<< endl;
cout << temp-
>
find
(a)<< endl;
cout <<
"input5"
<< endl;
chain *temp1 =
new chain;
while
(cin >> a && a !=0)
cout <<
"output5"
<< endl;
cout <<
*temp1;
*temp = temp-
>
merge
(*temp1)
; cout <<
*temp;
cout <<
"end"
<< endl;
return0;
}
資料結構與演算法 實驗三
1 利用順序棧將乙個非負的十進位制整數n轉換為對應的b進製數。要求 非負的十進位制整數n和b都從鍵盤輸入 轉換結果從螢幕輸出。2 括號匹配問題,編寫乙個判別表示式中括號是否正確配對的函式,並設計乙個測試主函式。include include define maxstacksize 100 typed...
資料結構實驗之串三
資料結構實驗之串三 kmp應用 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?input 首先輸入乙個整數n,代表有n個小朋友。下一行輸入n個數,分別代表...
資料結構實驗(三) 鏈佇列
一 實驗目的 1 熟練掌棧的結構特點,掌握佇列的順序儲存和鏈式儲存結構和實現。2 學會使用佇列解決實際問題。自己確定結點的具體資料型別和問題規模 分別建立乙個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。include using namespace std template struct node ...