<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    哲學家就餐問題(C)


    /*為對原創者尊重,以下無刪除章節!
    經常看到回復說,這個程序不能運行,還有怎么怎么..貼上來目的不是為了看結果。
    主要是方便大家理解思路過過程---
    家寶 */

    /*愿結伴共探編程之樂 作者:孤峰*/

    /*題目:一群哲學家圍坐在一個圓桌,手上持有密碼m,并從1開始編了號取初值m,哲學家從1開始報數, 報到m的哲學家停止吃飯,退出圓桌,求哲學家退出的順序。要求:n和初值m由完家輸入.手上的密碼隨機產生.最后要打印出編號對應的密碼,輸出哲學家離開的相后順序?

    分析:可用循環鏈表實現,鏈表數據類型為結構體,記錄編號和相應密碼,另外設標志哲學家報數的變量mouth, 它的值和哲學家嘴上報的數相等,則如果mouth和m相等,該哲學家就應該離開離開前取他的密碼交給m,同時將他的編號放另一單鏈表numbsave保存。注意編號要從numbsave的最后節點插入。當循環鏈表指向自身時停止比較,這個哲學家即是最后離開的一個.依次打印出numbsave中的數即為按編號哲學家離開的先后順序。

    */?????????????????

    #include "stdio.h"
    #include "conio.h"
    #include "stdlib.h"

    struct philosopher??????????? /*哲學家就餐結構體*/
    ?{ int number;????????????? /*編號*/
    ?? int password;
    ?? int mouth;???? /*嘴上報的數*/
    ???? struct? philosopher *next;
    ?};
    struct philosopher *phead,*pend,*pp;

    struct numbsave??????????????????? /*存放離開順序*/
    ?{ int numsave;
    ?? struct numbsave *next;
    ?};
    struct numbsave *top=NULL,*numbnew,*numbthis;

    void main(void)
    {?char *p,d;
    ?int? b=1,k,n,m,mouthm=1;
    ?clrscr(); gotoxy(9,8);
    ?printf("please input n m:");
    ?scanf("%d%d",&n,&m);??????? /*n為哲學家人數,m為初始密碼*/
    ?phead=(struct philosopher *)malloc(sizeof(struct philosopher));
    ?pend=phead;phead->mouth=1;
    ?for(b=1;b<=n-1;b++)???????????????? ?????????????? /*給哲學家分配隨機密碼*/
    ?{pend->number=b;
    ? k=random(20);????????? /*k為0<k<20之間的數*/
    ? while(k<=0)
    ? k=random(20);
    ? pend->password=k;
    ? pp=(struct philosopher *)malloc(sizeof(struct philosopher));
    ? pend->next=pp; pend=pp;
    ?}
    ?pend->number=b;???? ?????????? /*最后一位哲學家*/
    ?k=random(20); while(k<=0) k=random(20); pend->password=k; pend->next=phead; /*形成循環鏈表*/
    printf("\n\tphilosopher number correspondence password as followed:\n\t");
    pp=phead;
    for(b=1;b<=n;b++)
    ?{printf("%d:%d\t",pp->number,pp->password);
    ?pp=pp->next;
    ?}

    while(pend->next!=pend)
    ?{if(phead->mouth==m)?????????????????? ???/*如果嘴上報數和m相等,意味著一個人要走了*/
    ??{pp=phead;
    ?? phead->next->mouth=1;?mouthm=1;??/*下一位哲學家從一開始報,mm用于將順序報出數的交給嘴巴*/
    ?? phead=pend->next=phead->next; ???/*兩個指針一定要相鄰*/
    ?? numbnew=(struct numbsave*)malloc(sizeof(struct numbsave));
    ?? m=pp->password;???????????? ???/*修改m的值為離開哲學家的password*/
    ?? numbnew->numsave=pp->number;
    ?? if(top==NULL)?{top=numbnew; top->next=NULL;} /*離開的哲學家的編號存入numbsave的最后節點*/
    ?? else? { numbthis=top;
    ??while(numbthis->next!=NULL)? numbthis=numbthis->next;
    ?? numbthis->next=numbnew;?numbnew->next=NULL;
    ???}
    ?? free(pp);
    ??}
    ?? else {pend=pend->next;
    ??????? phead=phead->next;????????? ???/*讓phead指向下一個*/
    ??????? mouthm++;
    ??????? phead->mouth=mouthm;?????????? ???/*嘴巴說我該報mouthm*/
    ??????? }
    ?}???????/*打印離桌順序*/
    printf("\n\tphilosopher away from cookdesk in the follow queue:\n\t");
    while(top!=NULL)
    ?{ printf("%d? ",top->numsave);
    ?top=top->next;
    ?}
    printf("%d? ",pend->number);?????/*這個千萬別忘了,他是運氣最好的一位*/
    printf("\n\tpress any key to go back......");
    while(!kbhit()) ;
    }

    posted on 2007-03-18 07:55 金家寶 閱讀(479) 評論(0)  編輯  收藏 所屬分類: 數據結構和算法


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费a级毛片无码av| 成年18网站免费视频网站| 亚洲中文字幕无码一久久区| 久久精品国产亚洲AV| 成人性生交大片免费看午夜a| 日韩亚洲不卡在线视频中文字幕在线观看 | 毛片大全免费观看| 456亚洲人成影院在线观| 成年网站免费视频A在线双飞| 亚洲国产精品线观看不卡| 亚洲免费闲人蜜桃| 国内精品久久久久影院亚洲| 午夜神器成在线人成在线人免费 | 很黄很污的网站免费| 色拍自拍亚洲综合图区| 在线视频精品免费| 亚洲国产欧美一区二区三区| 又粗又硬免费毛片| 成在人线av无码免费高潮水| 婷婷精品国产亚洲AV麻豆不片| 99视频精品全部免费观看| 亚洲人成激情在线播放| 日本免费一区尤物| 一级毛片**免费看试看20分钟| 亚洲AV永久无码精品| 久久天天躁狠狠躁夜夜免费观看 | 国产午夜亚洲精品| 四虎国产精品免费视| 丁香花在线视频观看免费| 亚洲黄色一级毛片| 国产又粗又猛又爽又黄的免费视频| 污网站免费在线观看| 亚洲国产综合专区在线电影| 毛片免费视频观看| jizz免费在线观看| 亚洲沟沟美女亚洲沟沟| 四虎永久成人免费影院域名| 成年女人18级毛片毛片免费观看| 黄床大片30分钟免费看| 狠狠久久永久免费观看| caoporn成人免费公开|