資料結構實驗三

2021-10-10 02:51:03 字數 3241 閱讀 7079

一、 要求完成時間

實驗開始後的第四周之前完成

二、 實驗目的

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 ...