資源描述:
《2011-軟件技術(shù)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)書.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、《軟件技術(shù)基礎(chǔ)》課程實(shí)驗(yàn)指導(dǎo)書實(shí)驗(yàn)環(huán)境:C/C++語言編程TurboC3.0/VisualC++6.0一、實(shí)驗(yàn)內(nèi)容序號實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)類型學(xué)時要求1單鏈表的操作設(shè)計(jì)2必做2堆棧操作設(shè)計(jì)2必做3二叉樹操作設(shè)計(jì)2必做4數(shù)據(jù)的查找與排序設(shè)計(jì)2必做二、實(shí)驗(yàn)指導(dǎo)實(shí)驗(yàn)一單鏈表的操作一、實(shí)驗(yàn)?zāi)康?.掌握線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)(1)線性表的鏈?zhǔn)酱鎯υ?2)鏈?zhǔn)酱鎯Y(jié)構(gòu)的優(yōu)缺點(diǎn)2.掌握結(jié)構(gòu)體的應(yīng)用以及數(shù)據(jù)結(jié)點(diǎn)的生成(1)結(jié)構(gòu)體的定義(2)動態(tài)存儲分配函數(shù)的使用(3)強(qiáng)制類型轉(zhuǎn)換的方法3.掌握指針的應(yīng)用(1)鞏固指針的含義和用法(2)結(jié)
2、構(gòu)體指針的使用二、預(yù)習(xí)要求1.復(fù)習(xí)C語言(1)鞏固C語言程序設(shè)計(jì)的基本方法(2)鞏固在TC或VC環(huán)境中編寫和調(diào)試C程序2.復(fù)習(xí)指針和結(jié)構(gòu)體兩部分的知識(1)鞏固指針的含義以及定義方式(2)理解結(jié)構(gòu)體的定義以及其成員的賦值和引用3.理解課本關(guān)于單鏈表部分的知識(1)掌握單鏈表的生成原理和過程(2)在草稿紙上畫出簡單程序流程圖三、實(shí)驗(yàn)內(nèi)容1.通過C語言編程,用函數(shù)實(shí)現(xiàn)不低于五個結(jié)點(diǎn)的單鏈表的建立:(1)要求編寫功能函數(shù)實(shí)現(xiàn)單鏈表的建立;(2)鏈表中結(jié)點(diǎn)的數(shù)據(jù)類型為任意原子類型,以下參考算法假設(shè)的是整型;(3)采用循環(huán)
3、結(jié)構(gòu)建表,請同學(xué)自定義循環(huán)結(jié)束標(biāo)志,以下是次數(shù)循環(huán),同學(xué)們可設(shè)計(jì)為輸入某個鍵值結(jié)束,如數(shù)字‘-1’結(jié)束;(4)編寫訪問各結(jié)點(diǎn)的算法,把建成的單鏈表順序輸出。2.實(shí)現(xiàn)單鏈表的插入和刪除算法。3.編寫主函數(shù)調(diào)用以上各算法函數(shù),調(diào)試并運(yùn)行整個程序,分析運(yùn)行結(jié)果。一、實(shí)驗(yàn)原理1.尾插法建立單鏈表(1)算法原理:從一個空表開始,循環(huán)讀入數(shù)據(jù),生成新結(jié)點(diǎn),將讀入數(shù)據(jù)存放在新結(jié)點(diǎn)的數(shù)據(jù)域中,然后將新結(jié)點(diǎn)插入到當(dāng)前鏈表的表尾上,直到循環(huán)結(jié)束為止。12345L^(2)算法示意圖如下,若要建立L=(1,2,3,4,5)的單鏈表,則鏈
4、表結(jié)構(gòu)為:(3)算法描述://結(jié)點(diǎn)結(jié)構(gòu)體定義structnode{intdata;structnode*next;};//尾插法建立n個結(jié)點(diǎn)的單鏈表Lstructnode*CreateList(structnode*L,intn){inti;intx;structnode*p,*q;L=(structnode*)malloc(sizeof(structnode));L->data=n;L->next=NULL;q=L;for(i=n;i>0;i--){p=(structnode*)malloc(sizeof(st
5、ructnode));scanf("%d",&x);p->data=x;q->next=p;p->next=NULL;q=p;}returnL;}2.單鏈表的訪問從頭節(jié)點(diǎn)開始,依次輸出每個節(jié)點(diǎn)的值。voidaccess(structnode*h){structnode*p;p=h;while(p->next!=NULL){p=p->next;printf("%d",p->data);}}3.單鏈表的插入算法(1)算法原理:在以上算法的基礎(chǔ)上,在指定位置插入一個新結(jié)點(diǎn)。首先定義一個搜索指針p,從頭開始搜索(p=p-
6、>next)直到指定位置的前一個位置;然后建立新結(jié)點(diǎn),修改指針使之插入。(2)算法示意圖:若要在3號位置插入一個數(shù)據(jù)域?yàn)?的結(jié)點(diǎn)t,則鏈表結(jié)構(gòu)變?yōu)椋?2345L^6(3)算法描述://在第i個位置上插入一個新結(jié)點(diǎn)tstructnode*insert(structnode*L,inti){p=L;j=0;while(p->next!=NULL&&jnext;j++;}if(j!=i-1){printf("iisinvalid!");exit(0);}t=(structnode*)mallo
7、c(sizeof(structnode));scanf("%d",&x);t->data=x;t->next=p->next;p->next=t;returnL;}4.單鏈表的刪除算法請同學(xué)們參見課本P14的算法5,注意相關(guān)定義和語句的修改和完善。5.同學(xué)自行編寫主程序,完成整個實(shí)驗(yàn)。一、實(shí)驗(yàn)報告要求1.按教務(wù)處印發(fā)的標(biāo)準(zhǔn)的計(jì)算機(jī)實(shí)驗(yàn)報告格式填寫實(shí)驗(yàn)報告(1)字跡工整,內(nèi)容屬實(shí)規(guī)范;(2)報告不得打印或復(fù)印,也不得抄襲或有雷同。2.本實(shí)驗(yàn)為軟件設(shè)計(jì),報告中應(yīng)先畫程序流程圖,再闡述你的設(shè)計(jì)思路和過程;3.避免純粹的
8、抄寫源程序,應(yīng)適當(dāng)?shù)靥顚懸恍┱{(diào)試情況以及問題的產(chǎn)生原因和處理辦法;4.設(shè)計(jì)感想可包括你對本次實(shí)驗(yàn)的收獲、啟示以及不足和希望。一、思考題1.如果結(jié)點(diǎn)指針P指向鏈表中某一中間結(jié)點(diǎn),問:如何用P表示P之后的每一個結(jié)點(diǎn)?2.單鏈表可以按隨意順序輸出嗎?3.單鏈表和順序表所花的存儲空間相同嗎?二、注意事項(xiàng)1.算法和程序是不同的,課本上的算法不能直接拿來調(diào)試和運(yùn)行,必須將其改寫為程序