迴圈鍊錶ADT模板簡單應用演算法設計 約瑟夫環

2021-10-25 04:56:23 字數 2187 閱讀 4506

偽碼事故現場

分析與總結

問題描述

目的:使用c++模板設計迴圈鍊錶的抽象資料型別(adt)。並在此基礎上,使用迴圈鍊錶adt的基本操作,設計並實現單鏈表的簡單演算法設計。

內容:(1)請使用模板設計迴圈鍊錶的抽象資料型別。(由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。參考網盤中的單鏈表adt原型檔案,自行設計迴圈鍊錶的adt。)

(2)adt的簡單應用:使用該adt設計並實現迴圈鍊錶應用場合的一些簡單演算法設計。

應用2:編號為1,2,…,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼(正整數)。現在給定乙個隨機數m>0,從編號為1的人開始,按順時針方向1開始順序報數,報到m時停止。報m的人出圈,同時留下他的密碼作為新的m值,從他在順時針方向上的下乙個人開始,重新從1開始報數,如此下去,直至所有的人全部出列為止。請在使用迴圈鍊錶adt的基礎上,設計乙個演算法求出圈的順序(以編號表示)。限定人數至少為1.

template

<

class

elemtype

>

void

joseph

(cirlinklist

&a,int m)

;

//約瑟夫環專用結點型別

struct node

;

輸入說明

第一行:人數n

第二行:第乙個人所持的密碼

第三行:第二個人所持的密碼

第n+1行:第n個人所持的密碼

第n+2行:給定的隨機數m

輸出說明

第一行至第n行:建立的迴圈鍊錶的遍歷結果(乙個結點佔據1行)

第n+1行:空行

第n+2行:出圈的順序(編號與編號之間以「->」分隔)

輸入範例

738

12249

155

輸出範例
1 3

2 83 1

4 22

5 46 9

7 15

5->2->6->7->4->3->1

問題分析

問題重點

思路分析

偽碼

template

<

class

elemtype

>

void

joseph

(cirlinklist

&a,int m)

//報道的人出圈

cout<

>number<<

"->"

;//留下密碼

m = start-

>code -1;

temp = start;

//先移動乙個結點,先報乙個

start = start-

>next;

//之前被報道的結點被刪除

a.deletenode

(temp);}

cout<

>number;

//全部刪除了,將head置為空,不在呼叫析構函式了

a.sethead

(null);

//刪除最後乙個結點

delete start;

}

事故現場

第一次提交

第二次提交

第三次提交

分析與總結

乙個新的設想

順序棧ADT模板簡單應用演算法設計 回文判斷

問題描述 應用 正讀與反讀都相同的字串行稱為 回文 序列。請使用順序棧,設計並實現乙個演算法,判斷依次讀入的乙個以 為結束符的字串行是否為形如 序列1 序列2 模式的字串行。其中序列1和序列2中都不含有字元 且序列2是序列1的逆序列。例如,a b b a 是屬於該模式的字串行,而 1 3 3 1 則...

單鏈表ADT模板簡單應用演算法設計 按要求提純鍊錶

偽 異常處理現場 分析與總結 問題描述 目的 使用c 模板設計單鏈表的抽象資料型別 adt 並在此基礎上,使用單鏈表adt的基本操作,設計並實現單鏈表的簡單演算法設計。內容 1 請使用模板設計單鏈表的抽象資料型別。由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推...

8 順序棧ADT模板簡單應用演算法設計 迷宮問題

目的 使用c 模板設計順序棧的抽象資料型別 adt 並在此基礎上,使用順序棧adt的基本操作,設計並實現簡單應用的演算法設計。內容 1 請參照順序表的adt模板,設計順序棧的抽象資料型別。由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分...