資源描述:
《實(shí)驗(yàn)一線性表[鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)]》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、實(shí)驗(yàn)一?線性表一.目的與要求本次實(shí)習(xí)的主要目的是為了使學(xué)生熟練掌握線性表的基本操作在順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上的實(shí)現(xiàn),提高分析和解決問(wèn)題的能力。要求仔細(xì)閱讀并理解下列例題,上機(jī)通過(guò),并觀察其結(jié)果,然后獨(dú)立完成后面的實(shí)習(xí)題。二.例題[問(wèn)題描述]用鏈表形式存儲(chǔ)一個(gè)字符串,插入、刪除某個(gè)字符,最后按正序、逆序兩種方式輸出字符串。[輸入]初始字符串,插入位置,插入字符,刪除字符。[輸出]已建立鏈表(字符串),插入字符后鏈表,刪除字符后鏈表,逆轉(zhuǎn)后鏈表。[存儲(chǔ)結(jié)構(gòu)]采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)[算法的基本思想]建立鏈表:當(dāng)讀入字符不是結(jié)束符時(shí),給結(jié)點(diǎn)分配存儲(chǔ)空間,寫(xiě)數(shù)據(jù)域,將新結(jié)點(diǎn)插到表尾;插入字符:根據(jù)讀入的字
2、符在鏈表中找插入位置,將新結(jié)點(diǎn)插入到該位置之前;刪除字符:根據(jù)讀入的刪除字符在鏈表中找到被刪結(jié)點(diǎn)后,將其從鏈表中刪除;鏈表逆轉(zhuǎn):從鏈表的第一個(gè)結(jié)點(diǎn)開(kāi)始對(duì)所有結(jié)點(diǎn)處理,將每個(gè)結(jié)點(diǎn)的前驅(qū)變?yōu)樗暮罄^;打印鏈表:從鏈表的第一個(gè)結(jié)點(diǎn)開(kāi)始,依次打印各個(gè)結(jié)點(diǎn)的數(shù)據(jù)域。[參考源程序]#defineNULL0typedefstructnode{???chara;???structnode*link;}node,*nodelink;voidreadlink(nodelinkhead){???nodelinkp,q;???charc;???p=head;???printf("Inputalinktable(ast
3、ring):");???scanf("%c",&c);???if(c=='')printf("Thisstringisempty。");???while(c!=''){??????q=(nodelink)malloc(sizeof(node));??????q->a=c;??????p->link=q;??????p=q;??????scanf("%c",&c);????}???p->link=NULL;}voidwritelink(nodelinkhead){???nodelinkq;???if(head->link==NULL)printf("Thislinkisempty。"
4、);???for(q=head->link;q;q=q->link)??????printf("%c",q->a);???printf("");???}int?insert(nodelinkhead,chark1,chark2){???nodelinkp,q;???p=head->link;???while(p->a!=k1&&p)??????p=p->link;???if(p){??????q=(nodelink)malloc(sizeof(node));??????q->a=k2;??????q->link=p->link;??????p->link=q;??????return1;?
5、???}???else?{??????printf("Thereisno%c",k1);??????return0;?????}}int?delete(nodelinkhead,chark){???nodelinkp,q;???q=head;???p=head->link;???while(((p->a)!=k)&&p){??????q=q->link;??????p=p->link;????}???if(p){??????q->link=p->link;??????return1;??????}???else{??????printf("Thereisno%c",k);??????r
6、eturn0;????}}voidopside(nodelinkhead){???nodelinkp,q;???p=head->link;???while(p->link){??????q=p->link;??????p->link=q->link;??????q->link=head->link;??????head->link=q;????}}main(){???chark1,k2,k3;???nodelinkhead;???head=(nodelink)malloc(sizeof(node));???head->link=NULL;???readlink(head);???if(head
7、->link!=NULL){???printf("Buildlinkis:");???writelink(head);}???if(head->link!=NULL){???printf("Pleaseinputacharyouwanttoinsertafter:");???k1=getch();???printf("%c",k1);???printf("Pleaseinputacharyou