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