資料結構加里森的任務實驗報告

2022-11-12 03:39:03 字數 2471 閱讀 6921

題目:加里森的任務

一, 需求分析

1, 程式所能實現的功能:功能有三(由功能鍵判定)。

1)根據輸入的(n,x,y),通過程式顯示每輪派出去執行任務的戰士的編號,直至只剩一人的情況,判斷是否編號為1的加里森能否最終留下;

2)根據輸入的n值,找出從(n,1,1)到(n,n,n)滿足條件的三元數對;3)退出程式。

2,輸入以及輸出

1) 輸入輸出限制:n為大於等於2的正整數,x為大於等於1小於等於n的正整數,y為大於等於1的正整數(題幹沒有明確限制,預設小於等於n);

2) 輸入輸出形式:對於功能一,輸入符合要求的n,x,y,輸出每輪派出的戰士編號,yes/no表示加里森能否最後留下;對於功能二,輸入符合要求的n,輸出從(n,1,1)到(n,n,n)滿足條件的三元數對;對於功能三,輸出「程式已停止」。

3,正確的輸入輸出範例一:

正確的輸入輸出範例二:

正確的輸入輸出範例三:

錯誤的輸入輸出範例一:

錯誤的輸入輸出範例二:

二, 概要設計

本程式主要實現了兩個功能。

1) 功能一思路,先判斷輸入的n,x,y是否合理,如合理,則將編號1-n存入乙個迴圈鍊錶,頭指標移到編號x時開始計數,指標向後移動y-1次,輸出當前指標所存節點的編號,即為該輪被淘汰的戰士編號,然後再把該節點刪除,指標後移一位重新計數,重複上述操作,直至只留下乙個節點為止。若最後乙個節點編號為1,則加里森留下;否則未留下。

2) 功能二思路,先判斷輸入的n是否合理,如合理,則構建二重for迴圈(i,j,1<=i<=n, 1<=j<=n)列舉從(n,1,1)到(n,n,n)所有可能的nxy組合並進行判斷,一旦符合則輸出該組合。直至迴圈完畢。

判斷方法有兩種,第一種類似功能一,第二種利用約瑟夫環公式法。

資料結構型別的定義:

typedef struct linklink;

主程式流程:

int main()

if(choice==2)

if(choice==1&&t==1)

judge(n,x,y);

if(choice==2&&t==1)

可呼叫函式 judge,cleanjudge,rejudge

if(choice==0)

printf("程式已停止");

}程式模組之間的呼叫關係:

main函式先呼叫fanwei1函式或fanwei2函式判斷輸入是否合法,功能一接著呼叫judge函式,功能二接著呼叫cleanjudge函式或rejudge函式。(judge函式和cleanjudge函式中都呼叫了creatlinklist函式)

三, 詳細設計

1)//建立迴圈鍊錶的函式

void creatlinklist(link *p,int n)

}2)void judge(int n,int x,int y)//這個是帶輸出淘汰過程的判斷

//尋找起點

int m=1;//當前數到的數,起點開始叫號,此時m為1

while (n>1)//最後一位時必被淘汰,所以不用數

m++;

pre=p;

p=p->next;

}coutnum==1) cout<<"yes"< else cout<<"no"<}

3)int cleanjudge(int n,int x,int y)//這是無輸出的判斷,返回1為是,0為否

int m=1;

while (n>1)//最後一位時必被淘汰,所以不用數

m++;

pre=p;

p=p->next;

}if(p->num==1)

return 1;

else

return 0;

}4)功能與cleanjudge相同,思路不同

int rejudge(int n,int x,int y)

5)int fanwei1(int n,int x,int y)//選項1,判斷n,x,y的範圍

else

}else

}6)int fanwei2(int n)//選項2,判斷n的範圍

}函式呼叫關係圖

四, 除錯分析報告

1, 時空分析

creatlinklist函式 o(n)

judge函式 o(n)

cleanjudge函式 o(n)

rejudge函式 o(1)

main函式 o(n^2)

剛開始拿到題目沒有理解題意,感覺完全沒有條件,後來經過分析討論,發現n,x,y有一定限制,而且自擬程式的功能具有多樣性,程式編寫過程中有些因粗心產生的小問題,但都及時解決了。

五, 使用者使用說明

開啟程式會出現以下介面

使用者根據需要輸入1,2,0即可

當使用者輸入1時,要求輸入符合條件的n,x,y,輸入完按回車即可

當使用者輸入2時,要求輸入符合條件的n,輸完按回車即可

當使用者輸入0時

六, 測試結果

資料結構實驗報告

實驗報告 實驗課程 資料結構 實驗專案實驗 專業 電腦科學與技術 姓名於凡 學號 10703070328 指導教師汪林林 實驗時間 2008 12 7 重慶工學院計算機學院 實驗一線性表 1.實驗要求 掌握資料結構中線性表的基本概念。熟練掌握線性表的基本操作 建立 插入 刪除 查詢 輸出 求長度及合...

資料結構實驗報告

實驗一線性表的基本操作 1 實驗目的2 2 實驗環境2 3 實驗內容,主要 除錯與執行 2 4 總結14 實驗二棧的基本操作 1 實驗目的15 2 實驗環境15 3 實驗內容,主要 除錯與執行 15 4 總結18 實驗三赫夫曼樹 1 實驗目的18 2 實驗環境18 3 實驗內容,主要 除錯與執行 1...

資料結構實驗報告

實驗題目 計算機與通訊工程學院 2014 實驗一線性表的應用 實驗目的 1 掌握線性表的邏輯結構定義 2 掌握線性表的兩種儲存結構 順序和鏈式 3 掌握順序表和煉表的定義及基本操作 實驗內容 通過程式設計完成具有一定實際意義的課題,加深對線性表應用的理解和掌握。參考題目如下所示。學生可在完成以下題目...