欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      數(shù)據(jù)結(jié)構(gòu)分析報告(5篇)

      時間:2019-05-14 06:43:44下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)分析報告》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《數(shù)據(jù)結(jié)構(gòu)分析報告》。

      第一篇:數(shù)據(jù)結(jié)構(gòu)分析報告

      銀行自動取款系統(tǒng)一、目的

      根據(jù)所學(xué)知識,編寫指定題目的C語言程序,并規(guī)范地完成課程設(shè)計報告。通過課程設(shè)計,加深對《C語言程序設(shè)計》課程所學(xué)知識的理解,熟練掌握和鞏固C語言的基本知識和語法規(guī)范,包括:數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等);程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));庫函數(shù)應(yīng)用(時間函數(shù)、繪圖函數(shù)以及文件的讀寫操作函數(shù)等);復(fù)雜任務(wù)功能分解方法(自頂向下逐步求精、模塊化設(shè)計、信息隱藏等)。學(xué)會編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語言程序,從而具備利用計算機(jī)編程分析解決綜合性實(shí)際問題的初步能力。

      二 需求分析

      根據(jù)任務(wù)書里的“課程設(shè)計的基本要求”及給定的“課程設(shè)計的主要內(nèi)容”。編寫的銀行自動提款模擬系統(tǒng)由使用者擔(dān)當(dāng)銀行卡使用者自行輸入卡號模擬銀行卡使用系統(tǒng)進(jìn)行各項(xiàng)操作,該系統(tǒng)有簡便、穩(wěn)定等特點(diǎn)。

      該系統(tǒng)開始時有使用者自行初始化各項(xiàng)數(shù)據(jù),包括卡的數(shù)量,一天內(nèi)可操作次數(shù)上相及“銀行卡”的卡號和余額,使用者可根據(jù)不同情況對系統(tǒng)的各項(xiàng)內(nèi)容進(jìn)行初始化,方便、快捷。

      當(dāng)使用者輸入錯誤數(shù)據(jù)及操作次數(shù)達(dá)到上限時系統(tǒng)會自動退出或者給出相應(yīng)的恢復(fù)提示使用者重新操作,直到輸入正確,系統(tǒng)不會出現(xiàn)異常、突然崩潰,穩(wěn)定。

      1、所實(shí)現(xiàn)的功能:

      ①.系統(tǒng)能夠讓使用者自行輸入卡的數(shù)量及每天操作次數(shù)上限,然后初始化卡的卡號和卡上所擁有的余額;

      ②.初始化信息后,可以開始使用系統(tǒng)進(jìn)行存取款,輸入卡號,如果卡號為負(fù)責(zé)退出程序、卡號不存在則提示重新輸入直到輸入正確為止,如果此卡的操作次數(shù)已達(dá)上限則同樣退出程序;

      ③.輸入正確后可以輸入想要存取款數(shù)目,當(dāng)數(shù)目為正是存款,負(fù)數(shù)為取款;

      ④.正確存取款后,系統(tǒng)會自行輸出操作、卡上余額和剩下操作次數(shù)到屏幕,然后返回選擇菜單,使用者可以再進(jìn)行選擇進(jìn)行操作。

      2、測試預(yù)測

      ①.進(jìn)行測試,每個編寫的函數(shù)逐個進(jìn)行調(diào)試直到都能夠正常運(yùn)行;

      ②.在進(jìn)行存取款操作都,所對應(yīng)卡的操作次數(shù)應(yīng)加一,余額能夠進(jìn)行相應(yīng)的改變;

      ③.程序的各項(xiàng)運(yùn)作結(jié)果與預(yù)想的與一樣。

      三 概要設(shè)計

      程序的主要功能函數(shù)包括如下幾個部分: void init(void)/*初始化,輸入銀行卡初始信息*/ int search(int x)/*搜索輸入的卡號對應(yīng)的銀行卡*/ void work(void)/*主要功能函數(shù),存取款以及查詢*/ int main(void)/*主函數(shù),選擇菜單*/ 程序總體結(jié)果圖如下:

      程序主體部分結(jié)構(gòu)圖如下:

      開始進(jìn)入選擇菜單輸入選擇1.2.31.初始化信息輸入卡的數(shù)量和操作次數(shù)上限循環(huán)輸入卡號和卡上余額2.存取款輸入此次操作卡號輸入存款數(shù),正數(shù)為存,負(fù)數(shù)為取操作成功,顯示各項(xiàng)數(shù)據(jù)3.退出程序結(jié)束返回選擇菜單否輸入操作卡號如果為負(fù)數(shù)否進(jìn)入search函數(shù)是是否已達(dá)操作上限否輸入存取款數(shù)是Exit(結(jié)束)是Exit(結(jié)束)取款是是否負(fù)數(shù)否存款更改各項(xiàng)初始化數(shù)據(jù)顯示各項(xiàng)數(shù)據(jù)

      四 詳細(xì)設(shè)計

      1、二維數(shù)組的應(yīng)用 #define MAXN 100 #define MAX 10/*但是首先用宏定義來限制二維數(shù)組的行與列的長度,同時也方便了使用者可以隨意更改它的長度*/ int card[MAXN+1][MAX+1];/* 定義了一個card二維數(shù)組來承載信息,包括卡號、卡上余額、剩余操作次數(shù),還有每次操作存取款的具體數(shù)目*/

      2、循環(huán)語句與選擇性語句的使用

      2.1.在init函數(shù)里面用循環(huán)語句來循環(huán)初始化二維數(shù)組的各項(xiàng)信息:

      void init(void)/*初始化,輸入銀行卡初始信息*/ { int i;printf(“請輸入銀行卡的數(shù)量M:n”);scanf(“%d”,&m);printf(“請輸入操作次數(shù)上限N:n”);scanf(“%d”,&n);for(i=1;i<=m;i++){ printf(“請輸入第%d張銀行卡的卡號:n”,i);scanf(“%d”,&card[i][0]);printf(“請輸入第%d張銀行卡的金額:n”,i);scanf(“%d”,&card[i][1]);} } 2.2.同時在主功能函數(shù)work里面用了數(shù)次選擇語句來對輸入信息進(jìn)行判斷,以保證函數(shù)正常運(yùn)行 if(i<=-1){ printf(“感謝您使用本銀行的存取款軟件,再見n”);return;}/*操作者結(jié)束操作,打印感謝語,結(jié)束程序*/ if(t>m){ printf(“對不起,沒有此銀行卡。n”);break;}/*銀行卡號不存在*/ if(card[t][2]==n){ printf(“對不起,本銀行卡操作已達(dá)到日上限,請明日再操作。n”);continue;}/*操作達(dá)到上限*/

      if(money<0)/*取款時操作*/ /*當(dāng)取款金額超過余額時提示操作者重新輸入存取金額,直到輸入正確為止*/ while(card[t][1]<(-money)){ printf(“對不起,本銀行卡余額不足,只剩下%d元,請重新輸入存取金額:n”,card[t][1]);/*提示操作者重新輸入*/ scanf(“%d”,&money);/*輸入存取金額*/ } 3.在為了加入菜單,使用了switch語句已達(dá)到此目的

      switch(i){ case 1:

      init();/* 錄入帳號 */

      goto menu;

      break;case 2:

      work();/*存取款以及查詢*/

      goto menu;

      case 3:

      printf(“Thank for your using!”);/*退出程序*/

      exit(1);} 4.為了讓使用者在進(jìn)行存取款操作后能夠看清操作信心,使用延遲清屏語句是程序暫時停止,防止屏幕關(guān)閉

      system(“pause”);//防止屏幕自動關(guān)閉,方便用戶查看這次使用的過程,可按任意鍵結(jié)束

      五 調(diào)試分析

      1、在寫程序過程中要注意中文標(biāo)點(diǎn)和英文標(biāo)點(diǎn)之間的區(qū)別,如果不小心輸入了中文標(biāo)點(diǎn),在編譯過程中會出現(xiàn)報錯,而且錯誤不易發(fā)現(xiàn);

      2、每完成一整段代碼后要記得打上分號,在出現(xiàn)報錯后應(yīng)及時補(bǔ)上。

      3、注意函數(shù)定義之前必須進(jìn)行對其的聲明,養(yǎng)成良好的編程習(xí)慣。

      4、盡量少使用遞歸的方式來調(diào)用函數(shù),這樣會減少一些邏輯上的錯誤。

      六 測試結(jié)果

      圖1程序成功運(yùn)行后的界面

      在初次運(yùn)行程序后,請先選擇<1>對數(shù)組各項(xiàng)信息進(jìn)行初始化,以便一下的操作

      圖2初始化卡號數(shù)量及每天操作次數(shù)上限,然后循環(huán)初始化卡號及卡上余額

      圖3進(jìn)入存取款界面,輸入存取款數(shù)目,成功操作后,系統(tǒng)自動輸出操作信息

      七 用戶使用說明

      使用者在打開軟件后會出現(xiàn)相應(yīng)的菜單界面,菜單上有相應(yīng)操作的選項(xiàng)。用戶只需根據(jù)菜單提示輸入所需的操作序號即可進(jìn)入后面的一系列操作。進(jìn)行正確的初始化信息后,就可以正常的使用程序來模擬ATM機(jī)來進(jìn)行存取款了,在使用過程中如果有操作錯誤,系統(tǒng)會自動的提示你直到操作正確。

      八 課程設(shè)計總結(jié)

      在做這個課程設(shè)計的過程中,一開始我碰到過很多困難,比如如何實(shí)現(xiàn)初始化卡號信息、以及賬戶里面各種信息的儲存,雖然任務(wù)書里面有對相關(guān)的提示,但是一開始還是沒有找到方法。然后在想到界面的優(yōu)化時候,不知道什么方法能夠?qū)崿F(xiàn)在第一個用戶使用完程序后進(jìn)行全屏幕的清屏,方便后面的用戶使用。然后通過調(diào)用system()函數(shù)達(dá)到清屏的效果??傊@次課程設(shè)計讓我學(xué)習(xí)到了很多東西,收獲頗豐!

      第二篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告

      數(shù)據(jù)結(jié)構(gòu)課程設(shè)計

      散列表的應(yīng)用:插隊買票

      專業(yè) 計算機(jī)科學(xué)與技術(shù)(網(wǎng)絡(luò)技術(shù))

      金玲 計算機(jī)131 1310704114 張靜林 2015年1月23日 學(xué)生姓名 班學(xué)級 號

      指導(dǎo)教師 完成日期

      目錄概述……………………………………………………………………………………1 1.1 課程設(shè)計目的……………………………………………………………………….1 1.2 課程設(shè)計內(nèi)容……………………………………………………………………….1 2 系統(tǒng)需求分析……………………………………………………………………….1 2.1 主體功能…………………………………………………………………………....2 3系統(tǒng)概要設(shè)計…………………………………………………………………………2 3.1 系統(tǒng)流程圖………………………………………………………………………….2 4 系統(tǒng)詳細(xì)設(shè)計…………………………………………………………………………3 5 測試……………………………………………………………………………………5 5.1 測試方案…………………………………………………………………………….5 5.2 測試結(jié)果…………………………………………………………………………….5 6 小結(jié)……………………………………………………………………………………5 參考文獻(xiàn)…………………………………………………………………………………5 附錄………………………………………………………………………………………7 附錄1 源程序清單……………………………………………………………………...7 概述

      1.1 課程設(shè)計目的

      數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是為數(shù)據(jù)結(jié)構(gòu)課程獨(dú)立開設(shè)的實(shí)踐性教學(xué)環(huán)節(jié)。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計對于鞏固數(shù)據(jù)結(jié)構(gòu)知識,加強(qiáng)學(xué)生的實(shí)際動手能力和提高學(xué)生綜合素質(zhì)是十分必要的。課程設(shè)計的目的:

      1.要求學(xué)生達(dá)到熟練掌握C語言的基本知識和技能。

      2.了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨(dú)立分析和設(shè)計能力。3.提高程序設(shè)計和調(diào)試能力。學(xué)生通過上機(jī)實(shí)習(xí),驗(yàn)證自己設(shè)計的算法的正確性。學(xué)會有效利用基本調(diào)試方法,迅速找出程序代碼中的錯誤并且修改。

      4.培養(yǎng)算法分析能力。分析所設(shè)計算法的時間復(fù)雜度和空間復(fù)雜度,進(jìn)一步提高程序設(shè)計水平。

      5.初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能。

      1.2課程設(shè)計內(nèi)容

      本課程設(shè)計的任務(wù)是寫一個程序模擬這種情況。每個隊伍都允許插隊。如果你在排隊,有一個以上的朋友要求插隊,則你可以安排他們的次序。每次一個人入隊,并且如果這個入隊的人發(fā)現(xiàn)隊伍中有自己的朋友,則可以插入到這個朋友的后面;當(dāng)隊伍中的朋友不止一個的時候,這個人會排在最后一個朋友的后面;如果隊伍中沒有朋友,則他只能夠排在這個隊伍的最后面。每一個入隊的人都先進(jìn)行上述的判斷。當(dāng)隊伍前面的人買到車票之后,依次出隊。系統(tǒng)需求分析

      2.1 主體功能

      程序從“input.txt”文件讀入測試用例,一個文件可包含多個測試用例。每個用例的第一行是朋友組的數(shù)目n(1<=n<=1000)。對于一個朋友組以朋友的數(shù)目j(1<=j<=1000)開始,由朋友的個數(shù)以及他們的名字組成,一個空格后接該組朋友的名字,以空格分開,并且每個人的名字都不同。每個名字不超過四個字母,由{A,B,...,Z,a,b,...,z}組成。一個朋友組最多有1000個人,每個人只屬于一個朋友組。n=0時,測試數(shù)據(jù)結(jié)束。

      下面是一些具體命令:.ENQUEUE——X入隊;.DEQUEUE——排隊頭的人買票,離開隊伍,即出隊;.STOP——一個測試用例結(jié)束。

      測試結(jié)果輸出到“output.txt”文件中。每個測試用例第一行輸出“Scenario#k”,k是測試用例的序號(從1開始)。對每一個出隊命令,輸出剛買票離開隊伍的人名。兩個測試試用例 之間隔一空行,最后一個用例結(jié)束不輸出空行。系統(tǒng)概要設(shè)計

      3.1 系統(tǒng)流程圖 系統(tǒng)詳細(xì)設(shè)計

      本題目主要解決兩個問題:一是怎么存放和查找大量數(shù)據(jù)(主要是姓名);二是怎么操作“ENQUEUE”和“DEQUEUE”命令。

      用散列表來存放和查找數(shù)據(jù)。由于最多有1000個朋友組,每組最多有1000人,使用平方探測法解決沖突,則表的大小是2*(1000*1000),所以選擇TableSize=2000003(2000003是大于2000000的最小素數(shù))。同一個組內(nèi)的都是朋友,所以每個人除了記錄他的名字name,還要記錄他屬于哪個組group,另外用info來表示該單元是否被占用,數(shù)據(jù)結(jié)構(gòu)如圖4.1所示。散列函數(shù)是根據(jù)Honer法則計算一個以64為階的多項(xiàng)式,如圖4.2所示。沖突解決方法采用平方探測法,如圖4.3所示。

      #define TabSize 2000003 typedef struct hashtab *PtrToHash;struct hashtab

      /*散列表數(shù)據(jù)結(jié)構(gòu)*/ { char name[5];

      /*名字*/ int group;

      /*屬于哪個朋友組*/ char info;

      /*標(biāo)志位,該單元是否被占用*/ };圖4.1數(shù)據(jù)結(jié)構(gòu):散列表

      Int Hash(char *key,int TableSize){

      Int HashVal=0;

      While(key!=NULL)

      HashVal=(HashVal<<6)+*key;

      Return HashVal%TableSize;} 圖4.2散列函數(shù)

      Long int Find(PtrToHash hash,char *c){

      key=c;

      CurrentPos=Hash(key,TableSize);

      CollisionNum=0;

      While((單元被占用)and(單元內(nèi)的名字與查找的名字不同))

      {

      CurrentPos+=2*(++CollisionNum)-1;

      If(CurrentPos>=TabSize)

      CurrentPos=TabSize;

      }

      Return CurrentPos;} 圖4.3用平方探測法解決沖突

      第二個問題是關(guān)于怎么操作“ENQUEUE”和“DEQUEUE”命令。這可以用隊列來模擬。由于有插隊現(xiàn)象的存在,不能單純的用一個數(shù)組來表示隊列,因?yàn)檫@樣的話,插入一個朋友,則他后面的人都要往后移一個單位,刪除一個人,則他后面的人都要前移一個,會降低效率。所以,采用一個Index標(biāo)記來表示當(dāng)前元素的后繼元素,最后一個單元的后繼元素是第0個,形成環(huán),數(shù)據(jù)結(jié)構(gòu)如圖4.4所示。不用鏈表是因?yàn)殒湵泶娣胖羔樢残枰臻g,并且鏈表插入、刪除的效率沒有數(shù)組高。

      typedef struct Que *PtrToQue;struct Que

      /*隊列數(shù)據(jù)結(jié)構(gòu)*/ { long int HashVal;

      /*散列值*/ long int Index;

      /*在中的隊列序號*/ };圖4.4數(shù)據(jù)結(jié)構(gòu):隊列

      輸入ENQUEUE命令,如果隊伍里有朋友,則排在朋友后面;如果沒有朋友,則排在隊尾。入隊時,用一個數(shù)組記錄每個朋友組的最后一位,以便下一個朋友到來時排到他后面,這個數(shù)組被稱為“插隊數(shù)組”。

      輸入DEQUEUE命令,則根據(jù)“先進(jìn)先出”,按照各個元素和它后繼元素的先后順序,每次刪除隊列重的第一個。程序結(jié)構(gòu)如圖4.5所示。

      While(讀測試文件){

      if(輸入”ENQUEUE”)

      {

      讀入名字;

      插入散列表;

      插入隊列;

      }

      else if(輸入”DEQUEUE”)

      {

      刪除隊列第一個名字;

      將該名字輸出到文件;

      }

      else stop;} 圖4.5入隊、出隊操作 測試

      5.1 測試方案 按輸入要求輸入正常測試數(shù)據(jù),測試程序是否能正確解決問題,得到正確答案。應(yīng)注意邊界測試。例如,將n,j分別取為1的用例和n為1000的用例。n,j比較大時需寫程序生成測試用例。

      不按輸入要求輸入數(shù)據(jù),測試程序能否對輸入內(nèi)容進(jìn)行數(shù)據(jù)合法性檢測并進(jìn)行相應(yīng)的異常處理。例如,將n或j取為小于1或大于1000的數(shù),名字超過4個字母等情況下的測試用例。5.2 測試結(jié)果 小結(jié)

      在前面的學(xué)習(xí)過程中我們學(xué)到了很多知識而這次課程設(shè)計又是對我們所學(xué)的 一次總結(jié),剛開始,可以說是沒有頭緒,于是就去圖書館找資料,找到了一些關(guān)于程序方面的,可這遠(yuǎn)遠(yuǎn)不夠,這只是小小的開始。我們必須掌握很多已學(xué)的知識才能很好的完成本次的課程設(shè)計。在這次課程設(shè)計中,總的感覺是我遇到了很多困難這主要是由于我編寫代碼的經(jīng)驗(yàn)不足,有時雖然是一個很小的問題但解決起來卻花費(fèi)了我不少的時間,值得欣慰的是,當(dāng)自己苦思冥想或者和其它同學(xué)一起探討把問題解決的時候我還是覺得獲益非淺,這就是在摸索中尋求到的知識。在設(shè)計時也免不了存在著些不足,所以在今后的學(xué)習(xí)中我會努力取得更大的進(jìn)步。雖然對著電腦做程序,有些累,可當(dāng)看到勞動成果時,卻有另一番滋味。

      參考文獻(xiàn)

      [1]范策,周世平,胡曉琨.《算法與數(shù)據(jù)結(jié)構(gòu)(C語言版)》[M].北京:機(jī)械工業(yè)出版社,2004 [2]嚴(yán)蔚敏.《數(shù)據(jù)結(jié)構(gòu)(C語言版)》.北京:清華大學(xué)出版社,2004 [3]許卓群,楊冬青,唐世渭,張銘.《數(shù)據(jù)結(jié)構(gòu)與算法》.北京:高等教育出版社,2004 [4]徐孝凱.《數(shù)據(jù)結(jié)構(gòu)實(shí)用教程(第二版)》.北京:清華大學(xué)出版社,2006

      附錄

      附錄1 源程序清單

      #include #include #include #define TabSize 2000003

      /*散列表大小TabSize 是大于表最大空間的素數(shù)*/ #define Max 1000001

      /*隊列空間最大值*/ struct hashtab;typedef struct hashtab *PtrToHash;struct hashtab

      /*散列表數(shù)據(jù)結(jié)構(gòu)*/ { char name[5];

      /*名字*/ int group;

      /*屬于哪個朋友組*/ char info;

      /*標(biāo)志位,該單元是否被占用*/ };struct Que;typedef struct Que *PtrToQue;struct Que

      /*隊列數(shù)據(jù)結(jié)構(gòu)*/ { long int HashVal;

      /*散列值*/ long int Index;

      /*在中的隊列序號*/ };

      int hashedx=0;

      /*標(biāo)記元素是否已經(jīng)在散列表里*/ long int Find(PtrToHash hash,char *c)/*查找在散列表中的位置*/ { char *key;long int CurrentPos,CollisionNum;

      key=c;for(CurrentPos=0;*key;++key)

      /*散列函數(shù),計算散列值*/

      CurrentPos=(CurrentPos<<6)+*key;CurrentPos%=TabSize;

      /*散列值*/ CollisionNum=0;/*如果當(dāng)前單元被占用:單元內(nèi)的元素與當(dāng)前操作的名字不同,使用平方探測法解決沖突;與當(dāng)前操作的名字相同,則直接返回在散列中的位置*/ while((hash[CurrentPos].info)&&(strcmp(hash[CurrentPos].name,c)))

      {

      /*平方探測法*/

      CurrentPos+=2*(++CollisionNum)-1;

      if(CurrentPos>=TabSize)

      CurrentPos-=TabSize;}

      if((hash[CurrentPos].info)&&(strcmp(hash[CurrentPos].name,c)==0))

      /*元素已經(jīng)在散列表里*/

      hashedx=1;else /*元素不在散列表里*/

      hashedx=0;return CurrentPos;/*返回在散列表中的位置*/ }

      int main(){ long int Find(PtrToHash hash,char *c);

      /*查找在散列表中的位置*/

      PtrToHash hash;

      /*散列表*/ PtrToQue queue;

      /*隊列*/ int *grouppos;

      /*記錄每個朋友組的最后一位,即插隊數(shù)組*/ int n;

      /*測試用例數(shù)目*/ int num;

      /*當(dāng)前測試用例序號*/ long int i,ii,j,key,temp;long int head,last;

      /*隊列的頭和尾*/ char c[8],tempc[8];

      /*名字*/ FILE *fpin,*fpout;

      /*輸入、輸出文件指針*/

      if(!(fpin=fopen(“input.txt”,“r”)))

      /*打開測試文件*/ {

      printf(“fopen error!”);

      /*文件打開錯誤*/

      return-1;} if(!(fpout=fopen(“output.txt”,“w”)))

      /*打開輸出文件*/ {

      printf(“fopen error!”);

      return-1;}

      hash=(PtrToHash)malloc(sizeof(struct hashtab)*TabSize);/*為散列表申請空間*/ queue=(PtrToQue)malloc(sizeof(struct Que)*Max);/*為隊列申請空間*/ grouppos=(int *)malloc(sizeof(int)*1000);/*申請空間記錄每個朋友組的最后一位*/ for(i=0,j=1;i

      queue[i].Index=j;queue[i-1].Index=0;/*最后一個單元的后繼單元是第0個,形成環(huán)*/ num=0;for(fscanf(fpin,“%d”,&n);n;fscanf(fpin,“%d”,&n))/*輸入當(dāng)前測試用例的朋友組數(shù)*/ {

      if(n<1||n>1000)

      /*處理異常輸入n*/

      {

      fprintf(fpout,“n is out of rangen”);

      return-1;

      }

      num++;

      if(num!=1)

      /*兩個測試用例間輸入一空行*/

      fprintf(fpout,“n”);

      for(i=0;i

      hash[i++].info=0;

      /*初始化散列表,標(biāo)記位置0*/

      for(i=0;i

      /*對每一組朋友*/

      {

      fscanf(fpin,“%d”,&j);

      /*當(dāng)前組里的人數(shù)*/

      if(j<1||j>1000)

      /*處理異常輸入j*/

      {

      fprintf(fpout,“j is out of rangen”);

      return-1;

      }

      for(;j;--j)

      {

      fscanf(fpin,“%s”,c);

      /*輸入名字*/

      for(ii=0;ii

      tempc[ii]='