資源描述:
《計(jì)算機(jī)軟件技術(shù)基礎(chǔ)_實(shí)驗(yàn)指導(dǎo)書》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、《計(jì)算機(jī)軟件技術(shù)基礎(chǔ)》實(shí)驗(yàn)指導(dǎo)書編寫:XXX適用專業(yè):電器工程與自動化通訊工程電子信息工程安徽建筑工業(yè)學(xué)院電子與信息工程學(xué)院2007年9月1實(shí)驗(yàn)一:線性鏈表的建立、查找、插入、刪除實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)類型:驗(yàn)證實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康耐ㄟ^本實(shí)驗(yàn)的學(xué)習(xí),要求學(xué)生能夠通過單鏈表的存儲結(jié)構(gòu),掌握單鏈表的基本操作,包括單鏈表的建立、查找、插入、刪除、輸出等操作。通過本實(shí)驗(yàn)可以鞏固學(xué)生所學(xué)的線性表知識,提高編程能力,為后繼課程的學(xué)習(xí)奠定基礎(chǔ)。二、實(shí)驗(yàn)內(nèi)容1、為線性表{10,30,20,50,40,70,60,90,80,100}創(chuàng)建一個帶頭結(jié)點(diǎn)的單鏈表;2、
2、在該鏈表上查找值為50,65的結(jié)點(diǎn),并返回查找結(jié)果(找到:返回在縣新鏈表中的位置);3、在該鏈表上值為50的結(jié)點(diǎn)后,插入一個值為120的結(jié)點(diǎn);4、刪除該鏈表上值為70的結(jié)點(diǎn)。寫出各操作的實(shí)現(xiàn)函數(shù),并上機(jī)驗(yàn)證。三、實(shí)驗(yàn)原理、方法和手段使用帶頭結(jié)點(diǎn)的單鏈表的表示線性表,通過實(shí)驗(yàn),熟悉鏈表的創(chuàng)建、查找、插入、刪除、輸出等是鏈表的基本操作。具體如下:(1)首先定義單鏈表的節(jié)點(diǎn)結(jié)構(gòu);(2)在單鏈表創(chuàng)建過程中,首先初始化一個帶頭結(jié)點(diǎn)的空鏈表,對線性表中的各元素依次通過鍵盤輸入、建立該元素結(jié)點(diǎn)、插入到單鏈表中,實(shí)現(xiàn)單鏈表的創(chuàng)建過程;結(jié)點(diǎn)的插入有頭插入和尾插入兩種方
3、法,采用不同方法時(shí)應(yīng)注意元素的輸入順序。(3)查找過程可以從頭結(jié)點(diǎn)開始,將待查找的數(shù)據(jù)依次與每個結(jié)點(diǎn)的數(shù)據(jù)域比較,匹配及查找成功,弱鏈表訪問完未找到匹配的元素,則查找不成功。為能夠返回查找成功的結(jié)點(diǎn)位置,在鏈表的搜索過程中,應(yīng)設(shè)置一個計(jì)數(shù)器,記錄搜索結(jié)點(diǎn)的序號;(4)插入結(jié)點(diǎn)時(shí),首先要通過查找算法,找到帶插入結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),然后為帶插入元素建立結(jié)點(diǎn),通過指針的修改,將結(jié)點(diǎn)插入。(5)刪除結(jié)點(diǎn)時(shí),首先要通過查找算法,找到待刪除結(jié)點(diǎn)的前驅(qū),然后通過指針的修改,將待刪除結(jié)點(diǎn)從鏈表中卸下,釋放該結(jié)點(diǎn)。(6)以上操作的正確性,均可以通過鏈表的輸出結(jié)果來驗(yàn)證。因
4、此,可以統(tǒng)一寫一個單鏈表的輸出函數(shù)。29四、實(shí)驗(yàn)組織運(yùn)行要求采用以學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué),教師予以答疑與指導(dǎo)。五、實(shí)驗(yàn)條件PC機(jī)一臺、Windows操作系統(tǒng)、C++Builder軟件或TurboC環(huán)境六、實(shí)驗(yàn)步驟(1)、將提前準(zhǔn)備好的源程序錄入計(jì)算機(jī);(2)、調(diào)試源程序,修正錯誤,記錄實(shí)驗(yàn)數(shù)據(jù);(3)、分析運(yùn)行結(jié)果,驗(yàn)證所編程序是否正確。七、思考題(1)、線性表的邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)的區(qū)別?(2)、采用頭插入和尾插入方法,建立單鏈表有何區(qū)別?八、實(shí)驗(yàn)報(bào)告(1)、實(shí)驗(yàn)預(yù)習(xí):仔細(xì)閱讀實(shí)驗(yàn)指導(dǎo)書,復(fù)習(xí)教材關(guān)于線性表部分的內(nèi)容和C語言中關(guān)于指針的內(nèi)
5、容。(2)、實(shí)驗(yàn)記錄的內(nèi)容應(yīng)包括源程序、實(shí)驗(yàn)數(shù)據(jù)和運(yùn)行結(jié)果。(3)、實(shí)驗(yàn)結(jié)論部分的內(nèi)容應(yīng)包括對實(shí)驗(yàn)結(jié)果的分析和總結(jié),回答思考題。29參考程序#includetypedefstructnode{intinfo;/*每個元素?cái)?shù)據(jù)信息*/structnode*next;/*存放后繼元素的地址*/}linknode,*pointer;voidcreatelink(pointer*list){pointerp;intx,n,i;*list=(pointer)malloc(sizeof(linknode));(*list)->next=NULL
6、;printf("InputtheNumberofnode:");scanf("%d",&n);/*輸入結(jié)點(diǎn)個數(shù)*/printf("Inputthedatasofnode:");for(i=1;i<=n;i++)/*前插入法創(chuàng)建鏈表*/{scanf("%d",&x);p=(pointer)malloc(sizeof(linknode));p->info=x;p->next=(*list)->next;(*list)->next=p;}}voidprint(pointerh){pointerp;p=h->next;while(p){prin
7、tf("%6d",p->info);p=p->next;}}intindex(pointerlist,intx,pointer*pos){/*在鏈表list中,查找值為x的結(jié)點(diǎn),成功返回結(jié)點(diǎn)位置i及結(jié)點(diǎn)指針pos,不成功返回0*/pointerp;inti=0;p=list->next;while(p){i++;if(p->info!=x)p=p->next;else{*pos=p;29return(i);/*查找成功,返回結(jié)點(diǎn)位置i*/}}return(0);/*查找不成功,返回0*/}intinsertlink(pointerlist,intit
8、em,intx){/*在單鏈表list中,值為item的結(jié)點(diǎn)后,插入一個值為x的結(jié)點(diǎn)*/pointerp,q