本科生導(dǎo)師制問題_第1頁
本科生導(dǎo)師制問題_第2頁
本科生導(dǎo)師制問題_第3頁
本科生導(dǎo)師制問題_第4頁
本科生導(dǎo)師制問題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:本科生導(dǎo)師制問題實(shí)驗(yàn)類型:綜合性實(shí)驗(yàn)實(shí)驗(yàn)日期:2012.5.301.問題描述(2)本科生導(dǎo)師制問題在高校的教學(xué)改革中,有很多學(xué)校實(shí)行了本科生導(dǎo)師制。一個(gè)班級(jí)的學(xué)生被分給幾個(gè)老師,每個(gè)老師帶n個(gè)學(xué)生,如果該老師還帶研究生,那么研究生也可直接帶本科生。本科生導(dǎo)師制問題中的數(shù)據(jù)元素具有如下形式:l 導(dǎo)師帶研究生(老師,(研究生1,(本科生1,本科生m1),(研究生2,(本科生1,本科生m2)l 導(dǎo)師不帶研究生(老師,(本科生1,本科生m)導(dǎo)師的自然情況只包括姓名、職稱;研究生的自然情況只包括姓名、班級(jí);本科生的自然情況只包括姓名、班級(jí)。2.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(2)本科生導(dǎo)師制問題

2、typedef struct GLNodechar name100; /*教師或?qū)W生的姓名*/char prof100; /*教師結(jié)點(diǎn)表示職稱,學(xué)生結(jié)點(diǎn)表示班級(jí)*/int type; /*結(jié)點(diǎn)類型:0-教師,1-研究生,2-本科生*/struct struct GLNode *hp, *tp; ptr; /*hp指向同級(jí)的下一結(jié)點(diǎn),tp指向下級(jí)的首結(jié)點(diǎn)*/GList;3.算法設(shè)計(jì)(2)本科生導(dǎo)師制問題l 建立:建立導(dǎo)師廣義表。l 插入:將某位本科生或研究生插入到廣義表的相應(yīng)位置。l 刪除:將某本科生或研究生從廣義表中刪除。l 查詢:查詢導(dǎo)師、本科生(研究生)的情況。l 統(tǒng)計(jì):某導(dǎo)師帶了多少個(gè)研

3、究生和本科生。l 輸出:將某導(dǎo)師所帶學(xué)生情況輸出。l 退出:程序結(jié)束。4.界面設(shè)計(jì)(2)本科生導(dǎo)師制問題5. 運(yùn)行、測試與分析(2)本科生導(dǎo)師制問題6、源代碼:(2)本科生導(dǎo)師制問題#includevoid menu()printf(*n);printf(1.%35sn,建立廣義表);printf(2.%35sn,插入學(xué)生);printf(3.%35sn,刪除學(xué)生);printf(4.%35sn,查詢信息);printf(5.%35sn,統(tǒng)計(jì)導(dǎo)師的研究生,本科生人數(shù));printf(6.%35sn,輸出廣義表);printf(7.%35sn,退出);printf(*n);/這部分源代碼int

4、main(int argc,char *argv)typedef *head;char str100;int choice;while(1)menu();printf(請輸入你要選擇的序號(hào):n);scanf(%d,&choice);switch(choice)case 1:printf(請輸入你想建立的標(biāo)準(zhǔn)廣義表,例如:(高老師-教授-0,(李平-一班-2,楊梅-二班-2),(李平-博士-0,(李平-三班-1,(李平-四班-2)n);scanf(%s,str);head=glistcreate(str);break;case 2:head=studentinsert(head);break;c

5、ase 3:head=studentdelete(head);break;case 4:enquire(head);break;case 5:studentcount(head);break;case 6:glistprint(head);break;case 7:return 0;return 0;7.實(shí)驗(yàn)收獲及思考熟悉了編譯環(huán)境,并且對程序調(diào)試中出現(xiàn)的一些問題有了較好的解決方法,為以后的實(shí)驗(yàn)打下了良好的基礎(chǔ)。學(xué)會(huì)了解決具體問題的方法,增強(qiáng)實(shí)踐能力,將理論與實(shí)踐相結(jié)合,以便于知識(shí)的扎實(shí)與鞏固。另一種方法。C語言#include #include #include typedef char D

6、ataType;#include GList.hvoid main() char str1=(a,b,c),(d),e); char str2=(a,b,c),(d),e); char hstr100; GLNode *h, *p; int depth, number, length; h=CreatGList(str1); printf(廣義表str1=%s,str2); DecomposeStr(str2, hstr); printf(n表頭=%s,hstr); printf( 表尾=%s,str2); depth=GListDepth(h); printf(n深度depth=%d,dep

7、th); length=GListLength(h); printf(n深度length=%d, length); number=GListAtomNum(h); printf(n原子元素個(gè)數(shù)number=%d, number); p=GListSearch(h,d); if (p!=NULL) printf(n數(shù)據(jù)元素%c在廣義表中, p-val.atom); else printf(n廣義表中不存在要查找的數(shù)據(jù)元素n); DestroyGList(h);頭文件:typedef struct GListNodeint tag; union DataType atom; /原子元素域 stru

8、ct subGL struct GListNode *head; /頭指針 struct GListNode *tail; /尾指針 subList; /子表域 val;GLNode;void DecomposeStr(char str, char hstr) int i, j, tag, n = strlen(str); char ch;ch = str0;tag = 0; for(i = 0; i = n-1; i+) if(stri = , & tag = 1 ) break;/搜索最外層的第一個(gè)逗號(hào) ch = stri; if(ch = () tag+; if(ch = ) tag-;

9、 if(i = n-1 & stri = ,)/廣義表表尾部分非空時(shí) for(j = 0; j i-1; j+) hstrj = strj+1;/取表頭字符串 hstrj = 0; /添加結(jié)束符 if(stri = ,) i+; str0 = (; /添( for(j = 1; i tag = 0; h-val.atom = str0; else/建立子表 h = (GLNode *)malloc(sizeof(GLNode); h-tag = 1; DecomposeStr(str, hstr); h-val.subList.head = CreatGList(hstr); if(strcm

10、p(str, () != 0) /表尾非空時(shí) h-val.subList.tail = CreatGList(str); else h-val.subList.tail = NULL; /賦值空指針 return h;int GListDepth(GLNode *h) int max, dep; GLNode *pre; if(h = NULL) return 1;/遞歸出口,空表深度為1 if(h-tag = 0) return 0; /遞歸出口,原子元素深度為0/遞歸求廣義表深度 pre = h; for(max = 0; pre != NULL; pre = pre-val.subLis

11、t.tail) dep = GListDepth(pre-val.subList.head); /求表頭深度 if(dep max) max = dep; return max + 1; int GListLength(GLNode *h) int number = 0; GLNode *p; for(p = h; p != NULL; p = p-val.subList.tail) number+; return number; int GListAtomNum(GLNode *h) if(h = NULL) return 0; else if(h-tag = 0) return 1; el

12、se return GListAtomNum(h-val.subList.head) + GListAtomNum(h-val.subList.tail); GLNode *GListSearch(GLNode *h, DataType x) GLNode *p; if(h=NULL) return NULL;/查找失敗遞歸出口 if(h-tag=0&h-val.atom=x) return h;/查找成功遞歸出口 if(h-tag=1&h-val.subList.head!=NULL) p=GListSearch(h-val.subList.head,x); /在頭鏈中查找 if (p!=NULL) return p; if(h-tag=1&h-val.subList.tail!=NULL) p=GListSearch(h-val.subList.tail,x); /在尾鏈中查找 if (p!=NULL) return p; return NULL; /回溯至上一層 void DestroyGList(GLNode

溫馨提示

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

評(píng)論

0/150

提交評(píng)論