(完整word版)數(shù)據(jù)結(jié)構課程設計之簡易家譜報告_第1頁
(完整word版)數(shù)據(jù)結(jié)構課程設計之簡易家譜報告_第2頁
(完整word版)數(shù)據(jù)結(jié)構課程設計之簡易家譜報告_第3頁
(完整word版)數(shù)據(jù)結(jié)構課程設計之簡易家譜報告_第4頁
(完整word版)數(shù)據(jù)結(jié)構課程設計之簡易家譜報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、編 號:學 號:201140410119HUBEI POLYTECHNIC UNIVERSITY課程設計教學院計算機學院課程名稱數(shù)據(jù)結(jié)構課程設計題目簡易家譜系統(tǒng)專業(yè)計算機科學與技術班級(1)班姓名陳建輝同組人員周海濤,石義津,明廷柱指導教師程細才2013 年 1 月 8 日課程設計(論文)一概述 21 .課程設計的目的 22 .課程設計的要求 2二總體方案設計 31 .簡單家譜系統(tǒng)整體設計思路 32 .簡單家譜系統(tǒng)的主要特點及功能 5三詳細設計 71 .查詢?nèi)康募易V成員信息 72 .確定指定成員在家族中的輩份 73 .在家譜中添加新成員,并追加到文件中 9四程序的調(diào)試與運行結(jié)果說明 121

2、.實驗結(jié)果截圖: 122 .調(diào)試時遇到的問題 12五課程設計總結(jié) 13附錄一:程序源代碼 16附錄二:參考文獻 251源朗汽M冬傷課程設計(論文)概述1 .課程設計的目的1 .理解和掌握該課程中的有關基本概念,程序設計思想和方法。2 .培養(yǎng)綜合運用所學知識獨立完成課題的能力。3 .培養(yǎng)勇于探索、嚴謹推理、實事求是、有錯必改,用實踐來檢驗理論, 全方位考慮問題等科學技術人員應具有的素質(zhì)。4 .掌握從資料文獻、科學實驗中獲得知識的能力,提高學生從別人經(jīng)驗中 找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識和創(chuàng)新能力。2 .課程設計的要求設計要求:輸入家族成員情況,建立樹結(jié)構,統(tǒng)計家族成員人數(shù),能查詢

3、家族成員輩份情況。系統(tǒng)功能:1 .輸入、修改與刪除家譜信息功能2 .查詢功能:1)某家譜成員的所有子孫的集合2)某家譜成員的所有祖先的集合3)某家譜成員的所有同輩成員的集合4)求某家譜成員的所有上一輩成員的集合5)給出兩個家譜成員,確定他們的關系5二總體方案設計1 .簡單家譜系統(tǒng)整體設計思路此次課程設計的整體思路是采用遍歷算法,整個樹的定義使用兩個結(jié) 構體來表示,一個結(jié)構體專門用于存放每一個節(jié)點的信息,另一個節(jié)點中 定義了三個指針域,分別為父指針域(兄長指針域),兄弟指針域,子指針 域,整個樹的輸入采用文件導入的方式,首先將文件導入到樹中,文件包 含每一個家族成員的信息,以及一個標志位flag

4、 ,標志位的值為0, 1, 2,0 表示此節(jié)點沒有兄弟節(jié)點,1表示此節(jié)點至少有一個子節(jié)點,2表示此節(jié)點 至少有一個兄弟節(jié)點,使用的算法是先定義一個鏈式隊列,將文件中第一 個節(jié)點的內(nèi)容讀取放入開辟的樹的節(jié)點的空間里,然后將樹節(jié)點放入隊列 中,此時隊列不為空,以隊列不為空為判斷條件,進行 while循環(huán),判斷 flag的值,循環(huán)體中再進行文件讀取,循環(huán)中進行判斷,若 flag為0,則 繼續(xù)判斷隊列是否為空,為空就結(jié)束循環(huán),若不為空,則繼續(xù)出隊列,取 標志位進行判斷,若標志位為1,則生成新節(jié)點,用剛剛出列的節(jié)點的子指 針域進行指向新節(jié)點,新節(jié)點的父指針域指向出列的節(jié)點,剩余的域為空, 然后將新生成的

5、節(jié)點插入到隊列中,若flag為1,則進行兄弟節(jié)點的插入, 繼續(xù)循環(huán),若flag不為0,則在進行判斷,若為2,則繼續(xù)進行兄弟節(jié)點 的插入,以此類推,根據(jù)文件的讀取,將樹生成,本程序中所有的算法都 基于以上所介紹的算法。關于IO的設計:考慮到題目要求家譜信息以樹形的形式一次讀入內(nèi)存, 而個人的各種資 料現(xiàn)在雖然條目不多,但隨著程序的升級,以后可能變得越來越大。我把樹形結(jié)構和個人信息記錄的文檔分為兩個文件保存在外存中,一個文 件串行化地記錄家譜樹的結(jié)構信息,保存少量個人信息作為識別標志;另 一個文件保存完整的個人信息,所有的個人信息以線性記錄的方式記錄在 其中。當程序運行要讀入家譜結(jié)構時,只讀入保存

6、少量記錄的文件并建立 起樹形結(jié)構。索引時,以樹形中的少量信息為依據(jù)在另一個文件中找到全 部的各人信息資料。這樣的好處主要有兩點:1 .由于樹形結(jié)構是用行化記錄于外存,一個節(jié)點記錄多次,信息大量冗余,如果樹形節(jié)點中保留全部信息,必將造成大量的空間浪費;只保存作為索 引的少量信息在樹形結(jié)構中,節(jié)約了空間。2 .由于結(jié)構的精簡,在家譜初始化時讀入內(nèi)存需要的時間相應減少,節(jié)約 了裝載時間。這樣做存在的問題:每次執(zhí)行修改,添加,刪除,查詢時都要直接訪問外存來取得或?qū)懭霐?shù)據(jù)。 內(nèi)外存訪問上的巨大時間差的存在,使得進行這些操作相對來說并不顯得 很高效。關于樹形的結(jié)構:在樹形結(jié)構的選擇上,根據(jù)實際中多子女的現(xiàn)

7、象選擇一般樹, 考慮到家譜中 成員可能存在的不定成員數(shù)問題,拋棄了以數(shù)組為基礎的一般樹方案,決 定用鏈表來實現(xiàn)。樹形結(jié)構的外存保存。為了提高效率,樹形結(jié)構在程序初始化時由外存文 件一次讀入內(nèi)存,此后不管插入還是修改,刪除都不再對外存的樹結(jié)構保 存文件進行操作,只在內(nèi)存中處理,程序退出時對外存樹結(jié)構文件進行一 次更新。也就是說,不管在程序運行中中對家譜結(jié)構進行多少種,多少次 的操作,外存的樹結(jié)構文件始終只會被程序訪問兩次。關于功能的設計(以基本要求為準):1. 插入:用戶按提示輸入資料,在樹形中插入節(jié)點,在個人完整記錄 文件中添加插入人的所有信息并保存。2. 刪除:用戶輸入被刪除人的識別關鍵字(

8、即名字),在樹形結(jié)構中刪 除此人,在個人記錄文件中不處理。3. 修改:用戶輸入被刪除任的識別關鍵字(即名字),從個人完整記錄 文件中讀出該人所有信息供用戶進行修改,然后寫回。4. 查詢:完成了關鍵字查找部分和關系查找部分,讀出個人全部信息 并顯小0關于個人資料單元:由于樹形節(jié)點要涉及到大量的邏輯操作,要用到一些運算符的重載,個人 資料在樹形單元定義為class類,而寫入文件的單元存萃是數(shù)據(jù),定義為簡 單的struct類。定義為struct和class類,使得不管是樹形結(jié)構插入刪除還是IO都是對 整個結(jié)構體進行的操作,這樣,如果要往結(jié)構體中添加若干個新信息條目或取消一些不必要的信息條目,需要修改

9、的代碼非常之少,方便了以后的 升級。2.簡單家譜系統(tǒng)的主要特點及功能本系統(tǒng)的主要特點是算法簡潔,易于閱讀,用戶交互界面良好。主要實現(xiàn)功能:1 .確定指定成員在家族中的輩份2 .輸出指定輩的所有成員3 .在家譜中添加新成員,并追加到文件中4 .輸出指定家庭的所有成員5 .退出本系統(tǒng)各功能的算法思想:1 .讀出家譜并顯示存儲結(jié)構用棧,按照先顯示雙親,然后顯示其所有孩子的順序顯示所有家庭成員。2 .確定指定成員在家族中的輩份用求成員所在的二叉樹中的層數(shù) (按層遍歷二叉樹)來確定,這里采用的是 遞歸算法3 .輸出指定輩的所有成員此處定義了一個新的結(jié)構體類型(增加存儲節(jié)點所在的層數(shù)),定義如下: typ

10、edef struct ccstruct cc *child, *next;/next指向同輩份的人物char Name口;JPNode;并用一個隊列來比較顯示同輩分的所有成員。4 .在家譜中添加新成員,并追加到文件中首先,輸入一個新成員的名字;然后,輸入其雙親;之后,再添加到整個存儲二叉鏈表中。然后,再將新的存儲結(jié)構寫回到文件中。二叉鏈表的結(jié)點類型為:typedef struct node存放成員的名字其孩子指針其兄弟指針ElemType data10;/struct node *child; / struct node *brother; / BTNode;5 .輸出指定家庭的所有成員首先

11、,設一個棧,并設一個標記位,先置 1;然后,找到輸入的要待顯示的成員,將標記位置 0;再次,顯示其孩子和兄弟,依次下去直到顯示完其所有的親戚6 .退出本系統(tǒng)。源朗汽M冬傷課程設計(論文)三詳細設計1 .查詢?nèi)康募易V成員信息該部分程序所完成的具體功能是把賈府中所有的成員信息按照輩份依次顯 示出來,首先從賈無名開始,然后下一輩份的賈演、賈源等最后是賈蓉的 信息。每個輩份之間都有間隔。設計思想:利用隊列遍歷所有的結(jié)點,在遍歷的同時依次輸出每個結(jié)點的 值(即為家庭成員的信息)。代碼如下:void Dis_Family(JPNode *p)char nameNAME_length;JPNode *he

12、re = NULL;printf(請輸入該家庭的首個成員:); scanf(%s,name);here = Find_Name(p,name);if(here = NULL) printf(無該家庭!n); return;printf(n);DispJP(here);2 .確定指定成員在家族中的輩份該部分代碼所完成的具體功能是查詢某一個家庭成員的信息。首先手動輸 入你要查詢的那個成員的名字,然后利用隊列依次查找該成員的信息,如果該 家譜中存在這個成員則輸出該成員的有關信息;如果家譜中不存在該成員,則 輸出提示信息:家譜中無此人!設計思想:有兩個函數(shù),一個函數(shù)(queryElemt)利用隊列遍歷

13、所有的節(jié) 點,在遍歷的同時即可查找所輸入的成員是否存在該家譜中;另外一個函數(shù)(queryElemtoFamily )用于輸入你要查找的成員的輩分和輸出查找的結(jié)果。代碼如下: int beifen(JPNode *p, char name口)static int n = 1;static int level = 0;if(p = NULL )return level;if(Equal(p-Name,name) = 1)return (level=n);n+; beifen(p-child,name);n-; beifen(p-next,name); / 向右查詢n不必加(先加后減)! retur

14、n level;void Bei_Fen(JPNode *p)char nameNAME_length;int n=0;printf(請輸入要查明輩分的人的姓名:); scanf(%s,name);n = beifen(p,name);if(n = 0)printf(該家族中無此人!n);else printf(n %s 是 %s 家族中的第 %cH n,name,p-Name,n);/*輸出指定輩的所有成員*/void chabei(JPNode *p, int bei)static int n = 1;static int tag = 0;if(p = NULL )return;if(be

15、i = n)tag = 1;printf(%s ”,p-Name);n+; chabei(p-child,bei);n-; chabei(p-next,bei); / 向右查詢n不必加(先加后減)! if(tag = 0)printf(該家族中還沒有這一輩呢 .n);void Disp_Pei(JPNode *p)int bei;printf(n你想要查看那一輩的成員:);scanf(%d”,&bei);printf(n.該家族中輩分為的成員有.nn,bei);chabei(p,bei);printf(n);3 .在家譜中添加新成員,并追加到文件中該部分程序所完成的具體功能是:輸入你要添加人的

16、名字,比如吳長,他 會被添加到文件中。設計思想:首先確定他的父母,然后把他添加到他的父母的根節(jié)點之下。 代碼如下:int Equal(char const *p,char const q)/判斷兩個字符串是否相等while(*p+ = *q+)if(*p = 0 & *q = 0)return (1);return (0);JPNode *Find_Name(JPNode *s, char *parent)/定位家譜中的成員。返回其指針(地址)static JPNode *here = NULL;if(s = NULL)return here;if(Equal(s-Name,parent) =

17、 1)return (here=s);9源朗汽M冬傷課程設計(論文)here = Find_Name(s-child,parent);here = Find_Name(s-next,parent);return here;void Print_FILE(JPNode *p,FILE *fp)static int level=0;int i;if(p != NULL)for(i=0;iName);else return;level+;Print_FILE(p-child,fp);level-;Print_FILE(p-next,fp);void ADD_number(JPNode *p) / 在

18、家譜中添加新成員,并寫入文件char parentNAME_length,nameNAME_length;FILE *fp = NULL;JPNode *here = NULL;JPNode *s = (JPNode *)malloc( 2*sizeof(void *) + strlen(name) + 1 );s-next = s-child = NULL;printf(請輸入要添加的新成員的雙親姓名:); scanf(%s,parent);printf(請輸入要添加的新成員的姓名:); scanf(%s,name);strcpy(s-Name,name);here = Find_Name(

19、p,parent);if(here-child = NULL)here-child = s;elsehere = here-child;while(here-next != NULL)here = here-next;here-next = s;fp = fopen(jiapu_data.txt,w);Print_FILE(p,fp);fclose(fp);15四 程序的調(diào)試與運行結(jié)果說明1 .實驗結(jié)果截圖:D:Program FilesMicrosoft Visual StudioMyProjectsDebugjia_pu.exew2追。輩 朝開口蓄* 好尊員 笛員有族曲在所 m加庭 瞳添家

20、成輩? 史至正定作 F雷定出出 frii二 1 2 3 4 = 二大甘* H雪舞吳正權雙姓 員員 成成 的的 口 口 工力力 套添添Q DAProg ram FilesMicrosoft Visual StudioMyProj eel DebugXi ia jpu.exe露定出出在所添家成輩,MM中定定定代加開口蓄 號.%員 席員有斐*,請選擇:4你想要查看那一輩的成員,4該家族中輩分為4的成員有吳鯨吳鵬吳德峰吳瑩吳德紅吳德龍吳昊吳星吳花2 .調(diào)試時遇到的問題(1)當選擇功能3(添加新成員),添加完成員后,寫回文件時出現(xiàn)了錯誤, 原本添加的為其中一個結(jié)點的孩子,結(jié)果寫回文件時卻成了該結(jié)點的孫子

21、,也 就是本是要添加為此結(jié)點的孩子的兄弟,結(jié)果卻成了其孩子的孩子。最后經(jīng)過 單步跟蹤發(fā)現(xiàn)寫入文件的函數(shù)編寫錯誤,缺少判斷條件,經(jīng)過修改后,此問題得到了解決。(2)當選擇功能0 (顯示此家譜),沒有按照事先存儲在txt中的文件顯示, 通過認真檢查程序中顯示成員的函數(shù) (按層遍歷)、不斷調(diào)試,發(fā)現(xiàn)并不是該顯 示函數(shù)的錯誤,因為在功能4 (輸出指定家庭的所有成員)中,也是通過調(diào)用該 函數(shù)實現(xiàn)輸出功能,于是,檢查txt文件中事先存儲的家譜成員,發(fā)現(xiàn)是由于 “(”與“)”沒有匹配好,導致沒有按照預期想法創(chuàng)建二叉樹造成的錯誤,通 過修改txt文件,使得錯誤得以解決。五課程設計總結(jié)本組的課程任務為簡易家譜,

22、在組長的帶領下,經(jīng)過我們共同的努力,本 程序主要任務已基本完成。另外本程序功能完善,具有良好的交互性,可以滿 足用戶多種需求。美中不足的是本系統(tǒng)沒有采用之前我所設想的遞歸,我們這 次改用隊列來建樹、查找等,這樣代碼少有一定的冗余,如果時間充分,我們 會更加精進,爭取采用代碼量相對較少的遞歸算法,另外更加完善一些功能, 包括增加日志功能,給不同級別的人員設置管理權限,比如說家譜管理員在獲 得本族長的同意下修改某個成員的信息,而其他成員只具備瀏覽的功能。在本程序簡易家譜的創(chuàng)作過程中,我們組員各抒己見,意見很不一致,包 括是采用遞歸算法,還是采用隊列;數(shù)據(jù)成員的結(jié)構如何定義,甚至包括成員 的名字,大

23、家的意見都不統(tǒng)一。但是在探討的過程中,我們也理解自己思維的 不足,也見識了另外不同的編程思想,這也讓我體會到了交流的魅力。只有我 們大家坦誠布公的把自己想法說出來,然后我們在理性的分析算法的優(yōu)劣與可 行性,這樣就能結(jié)合大家共同的智慧,組織大家共同的力量,為共同的目標努 力奮斗。次大作業(yè)的推薦學時是20個學時,但回想起來,光這篇報告就寫了有 三四個學時,由于我本身編程能力不強,構思,寫代碼,修改,調(diào)試的時間加 起來絕對是有余了。雖然付出不少,但在前期的設計組織中,中期的代碼編寫 和后期的修改調(diào)試中都學到了不少。起初我的家譜中數(shù)據(jù)并不是以結(jié)構的形式打包,讀入,寫出操作的時候代 碼異常繁瑣,這是恰好

24、看到一本編程書上有用結(jié)構輸入輸出的范例,深深感到 結(jié)構化確實是方便多了,而且讀寫不容易出錯。當時我的代碼本已經(jīng)寫了有一 大半,思慮再三,還是決定進行大換血, 家譜數(shù)據(jù)的改變讓程序來了個大換血, 提高了效率的同時,代碼幾乎變了一多半。我想,當時唯一不變的就只有對整 個程序越來越清醒地認識和對將要完成的代碼的更準確地把握。代碼完成之后,一編譯,至少有五六十個錯誤提示,而且最末debug一行欄的最后一行提示因為先前的錯誤而中斷編譯,有的是指針指向錯誤,有的是 忘了分號,括號,更多的是一些賦值錯誤,前面的錯誤都好改,賦值錯誤就比 較麻煩了,因為要使用賦值的地方太多,逐行改代碼雖然也可以,但實在是一 個

25、巨大工程。所謂巧招必是險招一一至少對我是這樣一一說來慚愧,我只有嘗 試著寫以前從未是過的運算符重載函數(shù),為此專門翻找出了大一的C+徽材,溫習了 一番運算符重載才戰(zhàn)戰(zhàn)兢兢地搞定了賦值問題。試運行時出現(xiàn)了更多的問題,而且更具有隱蔽性,幾次為了一個邏輯錯誤 而來回反復地翻看代碼,嘿嘿,再加上網(wǎng)上有代碼的傳說,讓人有想直接放棄 的沖動,但一想到寫代碼的辛苦,覺得放棄了實在可惜。那幾天吃飯,睡覺, 走路,看電視,隨時隨地,都記掛著那幾處錯誤,腦子都會浮現(xiàn)出代碼的影子, 不自覺地開始找錯誤。哎那種感覺! 不知道是充實還是急迫地煩惱,最后終 于找到了,根本來不急高興,只有松了一口氣和一陣的疲憊?,F(xiàn)在程序終于

26、完成了,心里的石頭也下了地。至于成績,不想了 源朗汽M冬傷課程設計(論文)另外,通過本次課程設計,我覺得自己最大的收獲就是:(1)學會了怎樣將課堂所學知識運用到較為實際的應用中來由于對二叉鏈表的存儲比較感興趣,我選做的是家譜,開始覺得無從下手,但是經(jīng)過仔細分析后,漸漸找到一點思路(首先創(chuàng)建,然后分別實現(xiàn)各個功能,最后 利用菜單實現(xiàn)選擇功能并輸出結(jié)果)。(2)鍛煉提出問題、解決問題和自學的能力家譜的實現(xiàn)要求讀、寫文件,于是“如何將文件從文檔中讀出”,“怎么寫入文 件”都是要滿足要求必須解決的問題。為此,我查找了很多資料,最后自學、解 決這一問題(3)增加了對編程的熱愛和興趣本次編寫家譜程序的過程

27、中,我體驗到了編程的酸甜苦辣:開始, 由于即將運用 所學知識設計實際問題而激動興奮; 后來編寫程序過程中,在想不出算法如何實 現(xiàn)或者追求空間、時間上高效率的算法時會比較糾結(jié);以及遇到 BUGf,追蹤數(shù) 據(jù)的痛苦;當然,還有解決問題后的激動與自豪。 所有這些都增強了我對編程的 熱愛、提高了我對計算機專業(yè)的興趣。#源朗汽M冬傷課程設計(論文)21附錄一:程序源代碼#include#include static JPNode *last = NULL;#include#include#define NAME_length 50 /#define LINE_length 100 / typedef s

28、truct cc struct cc *child, *next;/next char Name口;JPNode;void clear(char p口,int n) /while(n- 0)*p+ = 0;名字最大長度文本行最大長度指向同輩份的人物清空字符數(shù)組pstatic int last_level = 0;void AddJP(JPNode *head, char const name口,int level) JPNode *s = head, *r = NULL;JPNode *p = (JPNode *)malloc( 2*sizeof(void *) + strlen(name)

29、+ 1 );p-child = p-next = NULL;strcpy(p-Name,name);if( *s = NULL)*s = p;last = p;return;if(level - last_level = 1) last-child = p; last =p;last_level = level;return;if(level = last_level) & (*s != NULL)last-next = p; last =p;last_level = level;return;r = *s;/r指向家譜樹last_level = level;while( level- 0)

30、/ 找到相同的輩分while(r-next != NULL)r = r-next;r = r-child;/以兄弟連接while( r-next != NULL) r = r-next;r-next = p;last = p;void CreatJP(JPNode *head)char nameNAME_length=, lineLINE_length=;char *p = NULL;int level=0,i=0;/輩分,以制表符個數(shù)表示FILE *fp = NULL;fp = fopen(jiapu_data.txt,r);if(fp = NULL) printf(open error!n

31、); exit(1); while(level=0, i=0, fgets(line,LINE_length,fp) != NULL)p = line;while(*p+ = t)level+; /計算輩分,計算完后p指向名字開始處while(linei+ != n);linei-1=0;/讀入的換行符用字符串結(jié)束標識符替換strcpy(name,p-1);AddJP(head,name,level);clear(name,NAME_length); clear(line,LINE_length);fclose(fp);void DispJP(JPNode *p)/ 從p指向的結(jié)點顯示該家族s

32、tatic int level=0;int i;if(p != NULL)for(i=0;iName);else return;level+;DispJP(p-child);level-;DispJP(p-next);/ /*在家譜中添加新成員,并追加到文件中*/int Equal(char const *p,char const q)/判斷兩個字符串是否相等while(*p+ = *q+)if(*p = 0 & *q = 0)return (1);return (0);JPNode *Find_Name(JPNode *s, char *parent)/定位家譜中的成員。返回其指針(地址)s

33、tatic JPNode *here = NULL;if(s = NULL)return here;if(Equal(s-Name,parent) = 1)return (here=s);here = Find_Name(s-child,parent);here = Find_Name(s-next,parent);return here;void Print_FILE(JPNode *p,FILE *fp)static int level=0;int i;if(p != NULL) for(i=0;iName);else return;level+;Print_FILE(p-child,fp

34、);level-;Print_FILE(p-next,fp);void ADD_number(JPNode *p) /在家譜中添加新成員,并寫入文件char parentNAME_length,nameNAME_length;FILE *fp = NULL;JPNode *here = NULL;JPNode *s = (JPNode *)malloc( 2*sizeof(void *) + strlen(name) + 1 );s-next = s-child = NULL;printf(請輸入要添加的新成員的雙親姓名:); scanf(%s,parent);printf( 請輸入要添加的新

35、成員的姓名:); scanf(%s,name);strcpy(s-Name,name);here = Find_Name(p,parent);if(here-child = NULL)here-child = s;elsehere = here-child;while(here-next != NULL)here = here-next;here-next = s;fp = fopen(jiapu_data.txt,w);Print_FILE(p,fp);fclose(fp);/*輸出指定家庭的所有成員*/void Dis_Family(JPNode *p)char nameNAME_leng

36、th;JPNode *here = NULL;printf(請輸入該家庭的首個成員:); scanf(%s,name);here = Find_Name(p,name);if(here = NULL) printf( 無該家庭!n); return;printf(n);DispJP(here);/*確定指定成員在家族中的輩份*/int beifen(JPNode *p, char name口)static int n = 1;static int level = 0;if(p = NULL )return level;if(Equal(p-Name,name) = 1)return (leve

37、l=n);n+; beifen(p-child,name);n-; beifen(p-next,name); / 向右查詢n不必加(先加后減)! return level;void Bei_Fen(JPNode *p)char nameNAME_length;int n=0;printf(請輸入要查明輩分的人的姓名:); scanf(%s,name);n = beifen(p,name);源朗汽M冬傷課程設計(論文)if(n = 0)printf(該家族中無此人!n);else printf(n %s 是 s 家族中的第 蟀 n,name,p-Name,n);/ /*輸出指定輩的所有成員*/void chabei(JPNode *p, int bei)static int n = 1;static int tag = 0;if(p = NULL )return;if(bei = n)tag = 1;pr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論