久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

數據結構實驗二 求解約瑟夫問題

時間:2019-05-13 12:06:04下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《數據結構實驗二 求解約瑟夫問題》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《數據結構實驗二 求解約瑟夫問題》。

第一篇:數據結構實驗二 求解約瑟夫問題

數據結構實驗二

求解約瑟夫問題

問題描述:使用代表頭節點的循環單鏈表解決此問題。設有n個人圍坐在一張圓桌周圍,現從某個人開始從1報數,數到m的人離開。接著從出列的下一個人開始重新從1開始報數,數到m的人又出列,如此下去直到所有的人都出列為止。求出他們的出列序列。

問題分析:例如,當n=8,m=4時,若從第一個人開始報數(設從1開始編號),則得到的序列是:4,8,5,2,1,3,7,6。算法:

void Josephus(int n, int m,int s)

{ //生成表頭節點,空單循環鏈表

LNode * HL = new LNode;

HL-> next = HL;

int i;//生成含有 n 個節點的、節點值依次為1,2……,n的帶表頭節點的循環單鏈表

For(i = n;i>=1;i--)

{ LNode * newptr = new LNode;

Newptr-> data = i;

newptr-> next = HL-> next;

HL-> next = newptr;}

//從表頭開始順序查找出第s個節點,對應第一個開始報數的人 LNode * ap = HL, *cp = HL->next;for(i= 1;i

ap = cp;

cp = cp->next;if(cp = = HL){ ap = HL;cp = HL->next;} } //依次使n-1個人出列 for(i=1;i

//順序查找出待出列的人,即為循環結束后cp所指向的節點

for(int j=1;jnext;if(cp ==HL){ ap = HL;cp = HL->next;} } //輸出cp節點的值,即出列的人

cout << cp->data <<”

“;//從單鏈表中刪除cp節點

ap-> next = cp-> next;delete cp;//使cp指向被刪除節點的后續節點

cp = ap-> next;//若cp指向了表頭節點,則后移ap和cp指針 if(cp = = HL){ ap = HL;cp = HL-> next;} }

//使最后一人出列

count << HL->next-> data << end1;

//刪除表頭節點和表頭附加節點

delete HL->next;

delete HL;}

補充操作系統練習:

1、有一個虛擬存儲系統, 每個進程在內存占有3頁數據區、1頁程序區.剛開始時數據區為空.有以下訪頁序列: 1、5、4、1、2、3、2、1、5、4、2、4、6、5、1

試給出下列情形下的缺頁次數:

(1)系統采用先進先出(FIFO)淘汰算法.(2)系統采用最近最少使用(LRU)淘汰算法.(3)若采用優化(OPT)淘汰算法呢?

2、設系統中有三類資源A、B和C,又設系統中有5個進程P1,P2,P3,P4和P5.在T0時刻系統狀態如下:

最大需求量

已分配資源量

剩余資源量

A

B

C

A

B

C

A

B

C

P1 8

P2 4

P3 10 1

P4 3

P5 5(1)系統是否處于安全狀態?如是,則給出進程安全序列.(2)如果進程P5申請1個資源類A、1個資源類B和1個資源類C,能否實施分配?為什么?

3、在一個兩道的批處理操作系統中,有6個作業進入系統,它們的進入時刻、估計運行時間和優先級如下表所示.作業號

進入時刻

估計運行時間

優先級

JOB1

8:00

90分鐘

JOB2

8:10

30分鐘

JOB3

8:30

20分鐘

JOB4

8:50

15分鐘

JOB5

9:20

10分鐘

JOB6

9:40

5分鐘系統采用短作業優先作業調度算法,作業一旦被調度運行就不再退出.但當有新的作業投入運行時,可以按照優先級進行進程調度.(1)試給出各個作業的運行時間序列.(例如:JOB1:8:00-8:30,9:10-9:20,…)

(2)試計算出作業的平均周轉時間.

第二篇:數據結構報告--約瑟夫環范文

實習報告

題目:約瑟夫環

班級:08052712學號: 08052211姓名: 葛俊峰

一、需求分析

1.本演示程序中,編號為1,2,?,n的n個人按順時針方向圍坐一圈,每個人持有一個密碼(正整數)。一開始任選一個正整數作為報數上限值m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,如此下去,直到所有人全部出列為止。

2.演示程序以用戶和計算機的對話方式執行,即在計算機終端上顯示“提示信息”之后,由用戶在鍵盤上輸入相應數據(即總人數,m的值,每個人所持的密碼),運算結果顯示在其后。

3.程序執行的命令包括:

(1)構造鏈表;(2)輸入數據;(3)執行報數,儲存出列人的序號,刪除出列人的信息以及把出列人的密碼賦給m;(4)結束。

4.測試數據:

m的初始值為20;n=7,7個人的密碼依次為:3,1,7,2,4,8,4,首先m值為6,則這正確的出列順序為6,1,4,7,2,3,5。

二、概要設計

為了實現上述操作,應以單向循環鏈表為存儲結構。為此,需要1個抽象數據類型:線性表。

1.線性表的抽象數據類型為:

ADT List{

數據對象:D={ai|ai∈ElemSet,i=1,2,?,n,n≥0}

數據關系:R1={|ai-1,ai∈D,i=2,3,?,n}

基本操作:

InitList(&L)

操作結果:構造一個空的線性表L。

}ADT List

2.本程序包括三個模塊:

1)主程序模塊:

void main(){

初始化;

輸入數據;

函數調用;

}

2)構造鏈表并輸入每個人信息的模塊-----實現線性表的抽象數據類型;

3)運行模塊-----模擬約瑟夫環依次出列;

各模塊之間調用關系如下:

主程序模塊

構造鏈表并輸入每個人信息的模塊

運行模塊

三、詳細設計

1.結點類型和指針類型

typedef struct Node{

int num;

int password;

struct Node *next;

}LNode,*LinkList;//結點類型,指針類型

Status MakeNode(LinkList &p,Elem Type e)

{

//分配由p指向的數據元素為e、后繼為“空”的特點,并返回TRUE,//若分配失敗,則返回FALSE

P=(LinkType)malloc(sizeof(NodeType));

If(!p)return FALSE;

p->data=e;p->next=null;return TRUE;

}

viod Free Node(Link Type &p)

{

//釋放p所指結點

}

2.主函數和其他函數

int main()

{

//主函數

LinkList L = NULL;

LinkList s ,r;

int n,i,j,m;//初始化

printf(“請輸入人數nn”);

scanf(“%d”,&n);

printf(“請輸入mn”);

scanf(“%d”,&m);

printf(“請依次輸入每個人的密碼n”);//輸入數據

CreatList(L,s,r,n);//創建鏈表run(L,n,m);//模擬約瑟夫環并輸出

return 0;

}//main

void CreatList(LinkList &L,LinkList &s,LinkList &r,int n)

{

//創建鏈表

int i=1;

s=(LNode*)malloc(sizeof(LNode));//分配空間

scanf(“%d”,&s->password);//輸入密碼

s->num = i;//序號為i

if(L==NULL)

L=s;

else

r->next=s;

r=s;//為下次連接做準備

for(i=2;i<=n;i++)

{

s=(LNode*)malloc(sizeof(LNode));//分配空間

scanf(“%d”,&s->password);

s->num = i;

r->next=s;//連接到下個結點

r=s;//為下次連接做準備

}

r->next = L;//閉合L = r;

} // void CreatList

void run(LinkList &L,int n,int m)

{

//模擬約瑟夫環并輸出

LinkList s,r;

int i,j;

for(i = 0;i < n;i ++)

{

for(j = 1;j < m;j ++)

L = L->next;//報數

s = L->next;

r = s->next;

printf(“%dn”,s->num);//輸出序號

m = s->password;

L->next = r;

free(s);//刪除結點

}

}//run

3.函數的調用關系圖反映了演示程序的層次結構:

main

↓↓

CreatListrun

↓↓

Make NodeFree Node

四、調試分析

1.剛開始由于使用頭結點,使得程序不符合要求。

2.在寫程序時忽略了一些變量參數的標識“&”,使調試程序費時不少。今后應重視確定參數的變量和賦值屬性的區分和標識。

3.本程序模塊劃分比較簡單且容易看懂,但頭指針賦空不太合理。

4.本實習作業采用數據抽象的設計方法,將程序劃分為3個層次,使得設計時思路清晰,實現調試順利

五、用戶手冊

1.本程序運行環境為DOS操作系統,執行文件為約瑟夫環.exe。

2. 進入演示程序后出現提示信息:

“請輸入人數n”

輸入后,出現提示信息:

“請輸入m”

輸入后,出現提示信息:

“請依次輸入每個人的密碼”

輸入后,顯示相應的結果。

第三篇:數據結構課程設計 背包問題的求解

2009屆 電子信息科學與技術專業 數據結構課程設計

背包問題的求解

摘要 組合優化問題的求解方法研究已經成為了當前眾多科學關注的焦點,這不僅在于其內在的復雜性有著重要的理論價值,同時也在于它們能在現實生活中廣泛的應用。背包問題是一個典型的組合優化問題,本課程設計用遞歸算法求解背包問題,就是在資源有限的條件下,追求總的最大收益的資源有效分配問題。關鍵詞 背包問題;

遞歸算法;

1問題描述

1.1問題描述

背包問題:設有不同價值、不同重量的物品n件,求從這n件物品中選取一部分的方案,使選中物品的總重量不超過指定的限制重量,但選中物品的價值之和最大。

1.2基本思想

(1)分別輸入n件物品的重量和價值。(2)采用遞歸尋找物品的方案。

(3)輸出最佳的裝填方案,包括選中的是哪幾種物品,總價值為多少。

2問題分析

背包問題的求解是一個很經典的案例。對于它的分析與研究已經到達了一定的深度,解決這個問題有很多很多的辦法。其中遞歸方法是比較簡化程序,也比較難理解的一個。

設n件物品的重量分別為w0,w1,?,wn-1,物品的價值分別為v0,v1,?,vn-1。采用遞歸尋找物品的選擇方案。設前面已經有了多種選擇方案,并保留了其中最大的選擇方案于數組option[],設方案的的總價值存于變量maxv,當前正在考察新方案其物品選擇情況保存于數組cop[],嘉定當前方案已經考慮了前i-1件物品,現在正在考慮第i件物品;當前方案已經包含的物品的質量之和為tw;至此,若其余物品都選擇可能的話,本方案能達到的總價值的期望值設為tv,算法引入tv是當一旦當前方案的總價值的期望值也小于前面方案的總價值maxv時,急需考察當前方案變成無意義的工作,應終止當前方案,立即去考察下一個方案。因為當方案的總價值不比maxv大時,該方案不會不會再被考察。這同時保證函數后找到的方案一定會比前面的方案更好。2009屆 電子信息科學與技術專業 數據結構課程設計 對于第i件物品的選擇有兩種可能:

(1)物品i被選擇,這種可能性僅當包含它不會超過方案總重量的限制時才是可行的。選中后,繼續遞歸去考慮其余物品的選擇;

(2)物品i不被選擇,這種可能性僅當不包物品i也有可能會找大價值更大的方案的情況。

就此,通過不斷地對從第一件開始的物品到第n件物品進行選擇或是不選擇,從而從各個方案的比較中選擇出最優方案。

采用option[]和cop[]兩個數組,來輔助完成遞歸尋找物品的選擇方案。數組option[]起到一個“旗幟”作用,用來區別于未被選擇的物品,從而達到輸出被選擇的函數。而cop[]則像是一個中間變量,它在遞歸過程中不斷地發生變化,將有效的最終數據傳輸給數組option[],起到一個橋梁作用。

3數據結構描述

背包問題結構體:

struct{

int weight;

int value;

}a[N];4算法設計

4.1程序流程圖

2009屆 電子信息科學與技術專業 數據結構課程設計

圖4-1 程序流程圖

4.2算法設計

根據問題分析中的思想寫出遞歸算法如下:

find(物品當前選擇已達到的重量和tw,本方案可能達到的總價值為tv){

/*考慮物品i包含在當前方案中的可能性*/ if(包含物品i是可接受的){

將物品i包含在當前方案中;

if(i

以當前方案作為臨時最佳方案保存;

恢復物品i不包含狀態;

} 2009屆 電子信息科學與技術專業 數據結構課程設計

/*考慮物品i不包含在當前方案中的可能性*/ if(不包含物品i僅是可考慮的)

if(i

以當前方案作為臨時最佳方案保存;

void find(int i,int tw,int tv)

{ int k;if(tw+a[i].weight<=limitw)

/*物品i包含在當前方案的可能性*/ { cop[i]=1;if(imaxv)

/*物品i不包含在當前方案的可能性*/ if(i

opion[k]=cop[k];maxv=tv-a[i].value;} } 5詳細程序清單

詳細程序清單見附錄。

6程序運行結果

背包問題求解界面如圖6-1所示。

圖6-1 背包問題求解界面

程序調試成功。

在課程設計代碼調試過程中也出了不少差錯,比如頭文件很容易忽略,同學指出才發現;一些符號像“;”也很容易丟掉或是中英文格式不正確;甚至像0和 O這種小錯誤有時也會發生,在經過調試和完善程序的過程中,這些錯誤已經全部改正。在此過程中我們學到了不少調試的技巧,極大得豐富了編程的知識,這些在程序的優化方面幫助很大。

7心得體會

通過此次課程設計的實踐,感觸較深。不僅使我們加深了對書本知識的理解,而且鍛煉了我們編寫程序、調試程序的能力。同時,此次課程設計也充分彌補了課堂教學中知識的缺陷。這次課程設計由于時間有限,對有些地方考慮的還不夠周到。

2009屆 電子信息科學與技術專業 數據結構課程設計

在本課題中,我們研究了如何用遞歸算法求解組合優化問題中的背包問題,背包問題是一個典型的組合優化問題,就是在資源有限的條件下,追求總的最大收益的資源有效分配問題。所以我們試著用所學的數據結構知識以及遞歸法來解決普通的背包問題。背包問題的遞歸思想確實有點難以理解,為了理解這個思想,我們確實花了很長時間,不過很高興最后經過我們的討論掌握了這個思想。

參考文獻

[1] 徐孝凱.數據結構課程實驗.北京:清華大學出版社,2002:100-132 [2] 張乃笑.數據結構與算法.北京:電子工業出版,2000:3-5 [3] 嚴蔚敏.數據結構(C語言版).北京: 清華大學出版社,2002:100-132 [4] 李春葆.數據結構(C語言篇)習題與解析(修訂版).北京:清華大學出版,2000:45-66

Knapsack problem solving

Li Shuai Zhu Zhili Kong Rongong(Department of Physics ,Dezhou University,Dezhou,253023)Abstract Combinatorial optimization problem solving method has become the focus of attention of the scientific, it not only lies in its inherent complexity has the important theoretical value, but also that they can in real life widely.Knapsack problem is a typical combinatorial optimization problem, the course is designed to use recursion algorithm for solving knapsack problem was under the condition of limited resources, the pursuit of the maximum benefit of the resources allocation problem.Keywords knapsack problem;recursive algorithm 2009屆 電子信息科學與技術專業 數據結構課程設計

附錄:詳細程序清單

#include #define N 100 int limitw,/*限制的總重量*/ totv,/*全部物品的總價*/ maxv;

/*可實現最大總價值*/ int opion[N],cop[N];

struct{

int weight;

int value;

}a[N];int n;

void find(int i,int tw,int tv)

{ int k;if(tw+a[i].weight<=limitw)

{ cop[i]=1;if(i

/*方案的選擇*/ /*當前方案的選擇*/ /*背包問題結構體*/

/*物品種數*/ /*物品i包含在當前方案的可能性*/ 7

2009屆 電子信息科學與技術專業 數據結構課程設計

if(tv-a[i].value>maxv)

/*物品i不包含在當前方案的可能性*/ if(i

第%d種物品(重量,價值):”,k+1);scanf(“%d,%d”,&w,&v);a[k].weight=w;a[k].value=v;totv+=v;} printf(“背包所能承受的總重量:”);scanf(“%d”,&limitw);maxv=0;for(k=0;k

printf(“最佳裝填方案是:n”);for(k=0;k

第四篇:數據結構實驗二報告

數據結構實驗二報告

——簡單計算器

姓名:王稀賓 班 級:06111106 學號:1120111699 一實驗目的

按照四則運算加、減、乘、除、冪(^)和括號的優先關系和慣例,編寫計算器程序。

二實驗內容

要求:

從鍵盤輸入一個完整的表達式,以回車作為表達式輸入結束的標志。輸入表達式中的數值均為大于等于零的整數。中間的計算過程如果出現小數也只取整。

三程序設計

程序模塊:

1輸入模塊,輸入多項式;

2計算模塊,根據輸入內容,判斷分析,計算出結果; 3輸出模塊,輸出計算結果。

定義結構創建結點: typedef struct { double data[50];int top;}OPND_Stack;//運算符結構體 typedef struct { char data[50];int top;}OPTR_Stack;主函數部分: void main(){ char a[80];int m;char b[80];printf(“============簡易計算器============n”);printf(“[四則運算.如:-1+(2+3)*9/(-2)-6].n請輸入一個表達式:n”);while(1){

gets(a);

strcpy(b,a);

while(1)

{

int p;

m=strlen(a);

p=Can(a,m);

if(p==0)break;

printf(“輸入錯誤.請從新輸入表達式:n”);

gets(a);

strcpy(b,a);

}

printf(“=*=*=*=*=*=*表達式結果=*=*=*=*=*=*n”);

printf(“該表達式的結果為:n%s=%-10.3lfn”,b,EvaluateExpression(a));

printf(“=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*n”);

printf(“繼續使用[四則運算.如:-1+(2+3)*9/(-2)-6].<關閉退出>.n請再輸入 一個表達式:n”);} }

四程序調試分析

1在四則混合運算中,運算符號的優先級比較難判斷。2心得體會: 我對編程是有很濃厚興趣的。在編程的過程中,我深深地體會到力不從心—有些知識沒能深入地理解和掌握以及VC++的許多功能沒能探索和了解使我編程時有好多的思想運用不上(如設計一個美觀的操作界面)。另外,我也感受到了數據結構的重要性,有了結構才能將好的思想付諸實踐。同時經過查詢資料了解到棧由多種運用方法,其中包括棧的順序存儲結構和鏈式存儲結構,棧是計算表達式的經典應用。數據結構中的許多結構都是很經典思想,只有把編程語言和數據結構都熟練掌握的情況下,才能做出一些很好的作品。在編程過程中,雖然有時候是很發悶的,尤其是程序無錯但結果不對,但是在完成一個完整的程序時所帶來的喜悅是其它事情所不能替代的。我很喜歡編程,即使我的知識和能力有限,但我相信經過努力,一切皆有可能。

五用戶使用說明

按要求正確輸入表達式即可得到結果。

六程序運行結果 附程序清單

#include #include #include //算符優先級表 char First[7][7]= { //'+','-','*','/','(',')','^' /*'+'*/ '>','>','<','<','<','>','<', /*'-'*/ '>','>','<','<','<','>','<', /*'*'*/ '>','>','>','>','<','>','<', /*'/'*/ '>','>','>','>','<','>','<', /*'('*/ '>','>','>','>','>','>',' >', /*')'*/ '<','<','<','<','< ','>','<', /*'^'*/ '>','>','>','>','<','> ','<' };//運算符數組

char OP[7]={'+','-','*','/','(',')','#'};//數據結構體 typedef struct { double data[50];int top;}OPND_Stack;//運算符結構體 typedef struct

{ char data[50];int top;}OPTR_Stack;//初始化運算符棧函數

void InitStack_R(OPTR_Stack *a){ a->top=-1;} //初始化數據站函數

void InitStack_D(OPND_Stack *a){ a->top=-1;} //運算符進棧函數

void Push_R(OPTR_Stack *a,char b){ a->top++;a->data[a->top]=b;} //數據進棧函數

void Push_D(OPND_Stack *a,double b){ a->top++;a->data[a->top]=b;} //取運算符棧頂符函數

void GetTop_R(OPTR_Stack *a,char *b){ *b=a->data[a->top];} //取數據棧頂數函數

void GetTop_D(OPND_Stack *a,double *b){ *b=a->data[a->top];} //判斷數據是否為運算符函數 int In(char a,char *s){ for(int i=0;i<7;i++)

if(a==s[i])

return 1;return 0;} //算符優先級判斷函數

char Precede(char a,char b){ int m,n;for(int i=0;i<7;i++){

if(a==OP[i])

m=i;

if(b==OP[i])

n=i;} return First[m][n];} //刪除運算符棧頂元素,并取新棧的棧頂元素 void Pop_R(OPTR_Stack *a,char *b){ a->top--;*b=a->data[a->top];} //取數據站的棧頂元素,并從棧中刪除此元素 void Pop_D(OPND_Stack *a,double *b){ *b=a->data[a->top];a->top--;} //算符優先算法求值核心函數

double EvaluateExpression(char *s){ OPND_Stack OPND;OPTR_Stack OPTR;char ch,theta;double x,a,b;int k=0;strcat(s,“#”);InitStack_R(&OPTR);Push_R(&OPTR,'#');InitStack_D(&OPND);GetTop_R(&OPTR,&ch);while(s[k]!='#'||ch!='#'){

if(In(s[k],OP)==0)

{

x=Getdouble(s,&k);

Push_D(&OPND,x);

}

else

{

switch(Precede(ch,s[k]))

{

case'<':Push_R(&OPTR,s[k]);

k++;

break;

case'=':Pop_R(&OPTR,&ch);

k++;

break;

case'>':GetTop_R(&OPTR,&theta);Pop_R(&OPTR,&ch);

Pop_D(&OPND,&b);Pop_D(&OPND,&a);

Push_D(&OPND,Operate(a,theta,b));

break;

}

}

GetTop_R(&OPTR,&ch);} GetTop_D(&OPND,&x);return x;InitStack_R(&OPTR);Push_R(&OPTR,'#');InitStack_D(&OPND);} //判斷表達式是否輸入正確.int Can(char a[],int n){ int p=0,s=0,t=0;for(int i=0;i

if(a[i]=='('||a[i]==')')

p++;

if((a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/')&&((a[i+1]<'0'&&a[i+1]!='(')||a[i+1]>'9'))

s++;

if(a[i]=='/'&&a[i+1]=='0')

s++;

if((a[i]=='('&&(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'))||(a[i]==')'&&a[i+1]=='('))

s++;

if(a[i]==')'&&a[i+1]!='

主站蜘蛛池模板: 5x性社区免费视频播| 日韩成人av无码一区二区三区| 三上悠亚的av片在线无码| 轻点好疼好大好爽视频| 好吊妞人成视频在线观看27du| 国产成人av性色在线影院色戒| 少妇真人直播免费视频| 鲁大师免费观看日韩| 色播在线精品一区二区三区四区| 欧美色欧美亚洲另类二区| 亚洲男人第一无码av网站| 少妇人妻av毛片在线看| 无码免费一区二区三区| 中文有码亚洲制服av片| 日韩一区二区三免费高清| 日本一区二区三区日本免费| 新普新京亚洲欧美日韩国产| 中文字幕人妻丝袜美腿乱| 久久久久99精品成人片| 十八禁午夜私人在线影院| 日本国产一区二区三区在线观看| 吸咬奶头狂揉60分钟视频| 中文字幕日本人妻久久久免费| 欧美婷婷六月丁香综合色| 国产精品成人午夜久久| 国产无遮挡裸露视频免费| 免费特黄夫妻生活片| 国产东北露脸熟妇| 亚洲嫩模喷白浆在线观看| 色综合网天天综合色中文| 东京热大乱系列无码| 久久久精品456亚洲影院| 亚洲成a人片在线观看无码不卡| 国产在线精品欧美日韩电影| 无码gogo大胆啪啪艺术| 巨茎中出肉欲人妻在线视频| 一二三四视频社区在线| 97高清国语自产拍| 97超碰中文字幕久久精品| 在线永久看片免费的视频| 欧美中文字幕无线码视频|