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