資源描述:
《軟件技術(shù)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)書(shū)6》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、軟件技術(shù)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)書(shū)主編:張志文易茗盧小勇2006年3月改編實(shí)驗(yàn)一線(xiàn)性表的基本運(yùn)算一、實(shí)驗(yàn)?zāi)康模?1)理解線(xiàn)性表的基本概念、特點(diǎn)和抽象數(shù)據(jù)類(lèi)型。(2)創(chuàng)建鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)線(xiàn)性表,實(shí)現(xiàn)查找、插入、刪除等算法。(3)實(shí)現(xiàn)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)線(xiàn)性表的遍歷算法。二、實(shí)驗(yàn)內(nèi)容:(1)用C語(yǔ)言編制單鏈表的初始化程序及主程序。(2)按尾接法創(chuàng)建單鏈表,單鏈表中含5個(gè)數(shù)據(jù)元索:'a','b','c',Q,匕',編制相應(yīng)的函數(shù)。(3)編制查找、插入、刪除等算法的函數(shù)。(4)編制鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)線(xiàn)性表的遍歷算法函數(shù)。(5)單步調(diào)試程序
2、:按Ctrl+F7鍵,在打開(kāi)的窗口中輸入觀(guān)察變量,如觀(guān)察p結(jié)點(diǎn)指針域的值輸入:p->nexto按F7鍵,單步執(zhí)行程序,紀(jì)錄單鏈表在創(chuàng)建、插入、刪除等操作時(shí)各結(jié)點(diǎn)的數(shù)據(jù)域及指針域的內(nèi)容,填入以下各表:創(chuàng)建鏈表:插入元索:節(jié)點(diǎn)序號(hào)數(shù)據(jù)域指針域節(jié)點(diǎn)序號(hào)數(shù)據(jù)域指針域112233445566刪除元素:查找元素:節(jié)點(diǎn)序號(hào)數(shù)據(jù)域指針域節(jié)點(diǎn)序號(hào)數(shù)據(jù)域指針域1122334455三、實(shí)驗(yàn)步驟:(1)編輯源程序,程序名為DLBCL、CPP:/*************DLBCLCPP************//*單鏈表數(shù)據(jù)
3、結(jié)構(gòu)處理*/#include(stdio.h)#include(stdlib.h)/*定義數(shù)據(jù)域的數(shù)據(jù)類(lèi)型*/typedefstructstudent/*定義一個(gè)與structstudent同類(lèi)型的變量elemtype*/{charname:}elemtype;/*定義單鏈表的數(shù)據(jù)元素,數(shù)據(jù)元素為抽象數(shù)據(jù)類(lèi)型*/structnodetypeelemtypedata;/*數(shù)據(jù)域structnodetypenext;/指針域*/};/*建立一個(gè)空表,初始化鏈表頭結(jié)點(diǎn)*/intinitl(structnod
4、etype**head){head=(structnodetype)malloc(sizeof(structnodetype));/*給頭結(jié)點(diǎn)分配一個(gè)內(nèi)存空間*//*并將頭結(jié)點(diǎn)指針指向該地址*/訐(*head==NULL)return0;(*head)->next=NULL;return1;/*若不成功,則返冋0*//*將頭結(jié)點(diǎn)的指針域初始化為*//*成功,返冋*//*以尾接法方式創(chuàng)建鏈表*/intcreatLl(structnodetype**head,elemtypea[],intn)struct
5、nodetype*p,*s;intj;訐(initl(head)==O)return0;p=*head;for(j=0;j<=n-l;++j)/*初始化鏈表頭結(jié)點(diǎn)*//*指針P指向鏈表頭*//*n個(gè)結(jié)點(diǎn),從0到n?l*/if((s=(structnodetype*)malloc(sizeof(structnodetype)))==NULL)retum0;s->data=a[j];s->next=NELL;p->next=s;p=s;/*為當(dāng)前結(jié)點(diǎn)分配一個(gè)內(nèi)存空間,并以s指向之*//*當(dāng)前結(jié)點(diǎn)數(shù)據(jù)域賦*
6、//*當(dāng)前結(jié)點(diǎn)指針域置為空*//*使P結(jié)點(diǎn)指針域指向當(dāng)前結(jié)點(diǎn)*//*調(diào)整P使之指向當(dāng)前結(jié)點(diǎn)*/return1;/*在鏈表中搜索x元素*/nodetype*searchL(structnodetype*head,elemtypex){structnodetype*p;p=head->next;/*p指向頭結(jié)點(diǎn)指針域指向的位置*/while(p!=NULL&&p->data.name!=x.name)/*如果p結(jié)點(diǎn)不為空或其數(shù)拯域不與搜*//*索x元素的數(shù)據(jù)域相等,則繼續(xù)查找*/p=p->next;/*p
7、扌旨向p結(jié)點(diǎn)指針域指向的位置,即下一個(gè)結(jié)點(diǎn)*/if(p!=NULL)printf(”%c",p=>data.name);ruturnp;}/*在鏈表中y元素前插入x元素*/intinsertL(structnodetype*head,elemtypex,elemtypey)structnodetype*p,*q,*s;q=head;p=head->next;while(p!=NULL&&p->data.name!=y.name)/*先找到y(tǒng)元素所在位置*/q=p;/*q,p指針后移*/p=p->n
8、ext;}/*循環(huán)結(jié)束后,q指向y元素結(jié)點(diǎn)或最后一個(gè)結(jié)點(diǎn),p指向y元素后一個(gè)結(jié)點(diǎn)或?yàn)镹ULL*/if((s=(structnodetype*)malloc(sizeof(structnodetype)))==NULL)return0;s->data=x;/*給新結(jié)點(diǎn)賦數(shù)據(jù)*/s-next=p;/*新結(jié)點(diǎn)指向P*/q?>next=s;return1;/*q結(jié)點(diǎn)指向新結(jié)點(diǎn)*//*刪除鏈表中X元素*/intdeleteL(structnodetype*head