線性表 7 C語言鍊錶實現俄羅斯輪盤賭小遊戲

2021-08-21 12:25:37 字數 1521 閱讀 3708

俄羅斯輪盤賭,想必很多人都聽說過,一種殘忍的賭博遊戲。遊戲的道具是一把左***,其規則也很簡單:在左***中的 6 個彈槽中隨意放入一顆或者多顆子彈,在任意旋轉轉輪之後,關上轉輪。遊戲的參加者輪流把手槍對著自己,扣動扳機:中槍或是怯場,即為輸的一方;堅持到最後的即為勝者。

本節實踐專案同輪盤賭類似,遊戲規則:n 個參加者排成乙個環,每次由主持向左***中裝一顆子彈,並隨機轉動關上轉輪,遊戲從第乙個人開始,輪流拿槍;中槍者退出賭桌,退出者的下乙個人作為第一人開始下一輪遊戲。直至最後剩餘乙個人,即為勝者。要求:模擬輪盤賭的遊戲規則,找到遊戲的最終勝者。

解決類似的問題,使用線性表的順序儲存結構和鏈式儲存結構都能實現,根據遊戲規則,在使用鏈式儲存結構時只需使用迴圈鍊錶即可輕鬆解決問題。

採用鏈式儲存結構對於求此類問題是最容易理解的,同時也避免了當參與人數較多時,像順序儲存那樣頻繁地移動資料。

具體實現**如下:

#include #include #include typedef enum  bool;

typedef struct lineline;

//按照賭徒人數,初始化迴圈鍊錶

void initline(line ** head,int n)

list->next=*head;//將鍊錶成環

}//輸出鍊錶中所有的結點資訊

void display(line * head)

printf("%d\n",temp->no);

}int main()

//將要刪除結點從鍊錶中刪除,並釋放其占用空間

printf("編號為 %d 的賭徒退出賭博,剩餘賭徒編號依次為:\n",temp->next->no);

line * del=temp->next;

temp->next=temp->next->next;

if (del==head)

free(del);

display(head);

//賦值新一輪開始的位置

linenext=temp->next;

round++;//記錄迴圈次數

}printf("最終勝利的賭徒編號是:%d\n",head->no);

return 0;

}

執行結果示例:

輸入賭徒人數:5

第 1 輪開始,從編號為 1 的人開始,槍在第 4 次扣動扳機時會響

編號為 4 的賭徒退出賭博,剩餘賭徒編號依次為:

1 2 3 5

第 2 輪開始,從編號為 5 的人開始,槍在第 3 次扣動扳機時會響

編號為 2 的賭徒退出賭博,剩餘賭徒編號依次為:

1 3 5

第 3 輪開始,從編號為 3 的人開始,槍在第 4 次扣動扳機時會響

編號為 3 的賭徒退出賭博,剩餘賭徒編號依次為:

1 5第 4 輪開始,從編號為 5 的人開始,槍在第 4 次扣動扳機時會響

編號為 1 的賭徒退出賭博,剩餘賭徒編號依次為:

5最終勝利的賭徒編號是:5

這個用陣列來實現,有興趣的可以自己實現了。

線性表 陣列實現 鍊錶實現 C語言

1 初始化 建立空的順序表 typedef int position typedef struct lnode list struct lnode list makeempty 2 查詢 define error 1 position find elementtype x,list ptrl 3 插...

C語言,線性表 順序表 鍊錶

c語言資料結構中兩個常見的線性表,用來儲存資料等 一 建立順序表 定義 將線性表中的元素相繼存放在乙個連續的儲存空間中。可利用一維陣列描述儲存結構 特點 線性表的順序儲存方式 遍歷 順序訪問,可以隨機訪問 順序表 include define maxsize 100 定義陣列長度 define ok...

合併鍊錶 線性表 C語言

今天寫寫鍊錶,新學的,啊 這。有點難。題目要求 線性表 假設有兩個按元素值遞增次序排列的線性表,均以單鏈表形式儲存。請編寫演算法將這兩個單鏈表歸併為乙個按元素值遞減次序排列的單鏈表,並要求利用原來兩個單鏈表的結點存放歸併後的單鏈表。先上 include include typedef struct ...