c鏈表的應(yīng)用例子_第1頁(yè)
c鏈表的應(yīng)用例子_第2頁(yè)
c鏈表的應(yīng)用例子_第3頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、c鏈表的應(yīng)用例子【篇一:c鏈表的應(yīng)用例子】printf(id成績(jī));if(tmp=(structstudent*)malloc(sizeof(structstudent)=null)(printf(錯(cuò)誤!不能申請(qǐng)所需白勺內(nèi)存!);exit(0);scanf(%d%f,tmp-id,tmp-score);tmp-next=null;if(tmp-id!=0)(if(head=null)(head=tmp;pthis=head;else(pthis-next=tmp;pthis=pthis-next;while(tmp-id!=0);free(tmp);/搜索鏈表找到第一個(gè)符合條件的項(xiàng)目輸出voi

2、dsearch(intid)(printf(查詢結(jié)果);printf(id成績(jī));printf(-);if(head=null)(printf(錯(cuò)誤!沒有數(shù)據(jù)!);return;pthis=head;while(pthis!=null)(if(pthis-id=id)(printf(%d%.2f,pthis-id,pthis-score);return;else(pthis=pthis-next;printf(沒有找到!);/列表輸出鏈表中的所有項(xiàng)voidlist()(printf(數(shù)據(jù)列表);printf(id成績(jī));printf();if(head=null)(printf(錯(cuò)誤,沒有數(shù)據(jù)

3、!);return;pthis=head;while(pthis!=null)(printf(%d%.2f,pthis-id,pthis-score);pthis=pthis-next;/插入數(shù)據(jù)voidinsert()(inti,p;structstudent*tmp;if(head=null)(printf(數(shù)據(jù)不存在,無(wú)法插入!);return;printf(請(qǐng)輸入插入點(diǎn):);scanf(%d,if(p0)(printf(輸入不合法!);return;printf(請(qǐng)輸入學(xué)生的信息:id成績(jī));if(tmp=(structstudent*)malloc(sizeof(structstud

4、ent)=null)(printf(錯(cuò)誤!不能申請(qǐng)所需的內(nèi)存!);exit(0);scanf(%d%f,tmp-id,tmp-score);tmp-next=null;if(tmp-id!=0)(pthis=head;if(p=0)(tmp-next=head;head=tmp;else(for(i=0;ii+)(if(pthis-next-next=null)(printf(找不到插入點(diǎn),您輸入的數(shù)據(jù)太大!);return;pthis=pthis-next;tmp-next=pthis-next;pthis-next=tmp;else(printf(數(shù)據(jù)無(wú)效!);free(tmp);/追加數(shù)

5、據(jù)voidappend()(structstudent*tmp;printf(請(qǐng)輸入學(xué)生的信息:id成績(jī));if(tmp=(structstudent*)malloc(sizeof(structstudent)=null)(printf(錯(cuò)誤!不能申請(qǐng)所需的內(nèi)存!);exit(0);scanf(%d%f,tmp-id,tmp-score);tmp-next=null;if(tmp-id!=0)(if(head=null)(head=tmp;else(pthis=head;while(pthis-next!=null)(pthis=pthis-next;pthis-next=tmp;else(f

6、ree(tmp);printf(數(shù)據(jù)無(wú)效!);/刪除數(shù)據(jù)voiddel()(intp,i;structstudent*tmp;if(head=null)(printf(沒有數(shù)據(jù),無(wú)法刪除!);return;printf(請(qǐng)輸入要?jiǎng)h除的記錄號(hào):);scanf(%d,if(p0)(printf(輸入不合法!);return;if(p=0)(pthis=head;head=pthis-next;free(pthis);pthis=head;else(pthis=head;for指定記錄不存在,無(wú)法刪除!);return;程序主函數(shù)voidmain()(charcommand=0;(i=0;ii+)(

7、pthis=pthis-next;if(pthis-next=null)(printf(tmp=pthis-next;pthis-next=pthis-next-next;free(tmp);/intid=0;/主循環(huán)do(printf(b,查詢記錄);printf(f,刪除記錄);printf(菜單);printf();printf(a,輸入數(shù)據(jù));printf(c,數(shù)據(jù)列表);printf(d,追加記錄);printf(e,插入記錄);printf(g,退出系統(tǒng));printf();printf(請(qǐng)選擇:);command=getch();/命令處理switch(command)(case

8、a:if(head=null)(input();break;else(printf(數(shù)據(jù)已經(jīng)存在!);break;caseb:printf(要查詢的id:);scanf(%d,id);search(id);break;casec:list();break;cased:append();break;casee:insert();break;casef:del();break;while(command!=g);【篇二:c鏈表的應(yīng)用例子】一、為什么用動(dòng)態(tài)內(nèi)存分配但我們未學(xué)習(xí)鏈表的時(shí)候,如果要存儲(chǔ)數(shù)量比較多的同類型或同結(jié)構(gòu)的數(shù)據(jù)的時(shí)候,總是使用一個(gè)數(shù)組。比如說(shuō)我們要存儲(chǔ)一個(gè)班級(jí)學(xué)生的某科分?jǐn)?shù),總是定

9、義一個(gè)float型(存在0.5分)數(shù)組:floatscore30;但是,在使用數(shù)組的時(shí)候,總有一個(gè)問題困擾著我們:數(shù)組應(yīng)該有多大?在很多的情況下,你并不能確定要使用多大的數(shù)組,比如上例,你可能并不知道該班級(jí)的學(xué)生的人數(shù),那么你就要把數(shù)組定義得足夠大。這樣,你的程序在運(yùn)行時(shí)就申請(qǐng)了固定大小的你認(rèn)為足夠大的內(nèi)存空間。即使你知道該班級(jí)的學(xué)生數(shù),但是如果因?yàn)槟撤N特殊原因人數(shù)有增加或者減少,你又必須重新去修改程序,擴(kuò)大數(shù)組的存儲(chǔ)范圍。這種分配固定大小的內(nèi)存分配方法稱之為靜態(tài)內(nèi)存分配。但是這種內(nèi)存分配的方法存在比較嚴(yán)重的缺陷,特別是處理某些問題時(shí):在大多數(shù)情況下會(huì)浪費(fèi)大量的內(nèi)存空間,在少數(shù)情況下,當(dāng)你定義

10、的數(shù)組不夠大時(shí),可能引起下標(biāo)越界錯(cuò)誤,甚至導(dǎo)致嚴(yán)重后果。那么有沒有其它的方法來(lái)解決這樣的外呢體呢?有,那就是動(dòng)態(tài)內(nèi)存分配。所謂動(dòng)態(tài)內(nèi)存分配就是指在程序執(zhí)行的過程中動(dòng)態(tài)地分配或者回收存儲(chǔ)空間的分配內(nèi)存的方法。動(dòng)態(tài)內(nèi)存分配不象數(shù)組等靜態(tài)內(nèi)存分配方法那樣需要預(yù)先分配存儲(chǔ)空間,而是由系統(tǒng)根據(jù)程序的需要即時(shí)分配,且分配的大小就是程序要求的大小。從以上動(dòng)、靜態(tài)內(nèi)存分配比較可以知道動(dòng)態(tài)內(nèi)存分配相對(duì)于景泰內(nèi)存分配的特點(diǎn):1、不需要預(yù)先分配存儲(chǔ)空間;2、分配的空間可以根據(jù)程序的需要擴(kuò)大或縮小。二、如何實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配及其管理要實(shí)現(xiàn)根據(jù)程序的需要?jiǎng)討B(tài)分配存儲(chǔ)空間,就必須用到以下幾個(gè)1、mallocmalloc的原

11、型為:void*malloc(unsignedintsize)其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間。其參數(shù)是一個(gè)無(wú)符號(hào)整形數(shù),返回是一個(gè)指向所分配的連續(xù)存儲(chǔ)域的起始地址的。還有一點(diǎn)必須注意的是,當(dāng)未能成功分配存儲(chǔ)空間(如內(nèi)存不足)就會(huì)返回一個(gè)nullo所以在調(diào)用該時(shí)應(yīng)該檢測(cè)返回是否為null并執(zhí)行相應(yīng)的操作。下例是一個(gè)動(dòng)態(tài)分配的程序:#include#includemain()intcount,*array;/*count是一個(gè)計(jì)數(shù)器,array是一個(gè)整型指針,也可以理解為指向一個(gè)整型數(shù)組的首地址*/if(array(int*)malloc(10*sizeof(int)

12、=null)printf(不能成功分配存儲(chǔ)空間。exit(1);for(count=0;count10;count+)/*給數(shù)組賦值*/arraycount=count;for(count=0;count10;count+)/*打印數(shù)組元素*/printf(%2d,arraycount);上例中動(dòng)態(tài)分配了10個(gè)整型存儲(chǔ)區(qū)域,然后進(jìn)行賦并打印。例中if(array(int*)malloc(10*sizeof(int)=null)語(yǔ)句可以分為以下幾步:分配10個(gè)整型的連續(xù)存儲(chǔ)空間,并返回一個(gè)指向其起始地址的整型把此整型地址賦給array檢測(cè)返回是否為null2、free由于內(nèi)存區(qū)域總是有限的,不能

13、不限制地分配下去,而且一個(gè)程序要盡量節(jié)省資源,所以當(dāng)所分配的內(nèi)存區(qū)域不用時(shí),就要釋放它,以便其它的變量或者程序使用。這時(shí)我們就要用到free。其原型是:voidfree(void*p)作用是釋放p所指向的內(nèi)存區(qū)。其參數(shù)p必須是先前調(diào)用malloc或calloc(另一個(gè)動(dòng)態(tài)分配存儲(chǔ)區(qū)域的)時(shí)返回的。給free傳遞其它的很可能造成死機(jī)或其它災(zāi)難性的后果。注意:這里重要的是的,而不是用來(lái)申請(qǐng)動(dòng)態(tài)內(nèi)存的本身。例:int*p1,*p2;p1=malloc(10*sizeof(int);p2=p1;free(p2)/*或者free(p2)*/malloc返回賦給p1,又把p1的賦給p2,所以此時(shí)p1,p2

14、都可作為free的參數(shù)。malloc是對(duì)存儲(chǔ)區(qū)域進(jìn)行分配的。free是釋放已經(jīng)不用的內(nèi)存區(qū)域的。所以由這兩個(gè)就可以實(shí)現(xiàn)對(duì)內(nèi)存區(qū)域進(jìn)行動(dòng)態(tài)分配并進(jìn)行簡(jiǎn)單的管理了。一、單鏈表的建立有了動(dòng)態(tài)內(nèi)存分配的基礎(chǔ),要實(shí)現(xiàn)鏈表就不難了。所謂鏈表,就是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表元素的一種。鏈表又分為單鏈表、雙向鏈表和循環(huán)鏈表等。我們先講講單鏈表。所謂單鏈表,是指數(shù)據(jù)接點(diǎn)是單向排列的。一個(gè)單鏈表結(jié)點(diǎn),其結(jié)構(gòu)類型分為兩部分:1、數(shù)據(jù)域:用來(lái)存儲(chǔ)本身數(shù)據(jù)2、鏈域或稱為域:用來(lái)存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址或者說(shuō)指向其直接后繼的。例:typedefstructnode(charname20;structnode*link;st

15、ud;這樣就定義了一個(gè)單鏈表的結(jié)構(gòu),其中charname20是一個(gè)用來(lái)存儲(chǔ)姓名的字符型數(shù)組,*link是一個(gè)用來(lái)存儲(chǔ)其直接后繼的。定義好了鏈表的結(jié)構(gòu)之后,只要在程序運(yùn)行的時(shí)候愛數(shù)據(jù)域中存儲(chǔ)適當(dāng)?shù)臄?shù)據(jù),如有后繼結(jié)點(diǎn),則把鏈域指向其直接后繼,若沒有,則置為null。下面就來(lái)看一個(gè)建立帶表頭(若未說(shuō)明,以下所指鏈表均帶表頭)的單鏈表的完整程序。#includestdio.h#includemalloc.h/*包含動(dòng)態(tài)內(nèi)存分配函數(shù)的頭文件*/#definen10/*n為人數(shù)*/typedefstructnodecharname20;structnode*link;stud;stud*creat(int

16、n)/*建立單鏈表的函數(shù),形參n為人數(shù)*/stud*p,*h,*s;/*h保存表頭結(jié)點(diǎn)的指針,*p指向當(dāng)前結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn),*s指向當(dāng)前結(jié)點(diǎn)*/inti;/*計(jì)數(shù)器*/if(h=(stud*)malloc(sizeof(stud)=null)/*分配空間并檢測(cè)*/printf(不能分配內(nèi)存空間!exit(0);h-name0=0/*把表頭結(jié)點(diǎn)的數(shù)據(jù)域置空*/h-link=null;/*把表頭結(jié)點(diǎn)的鏈域置空*/p=h;/*p指向表頭結(jié)點(diǎn)*/for(i=0;ii+)if(s=(stud*)malloc(sizeof(stud)=null)/*分配新存儲(chǔ)空間并檢測(cè)*/printf(不能分配內(nèi)存空間!

17、exit(0);p-link=s;/*把s的地址賦給p所指向的結(jié)點(diǎn)的鏈域,這樣就把p和s所指向的結(jié)點(diǎn)連接起來(lái)了*/printf(請(qǐng)輸入第%d個(gè)人的姓名,i+1);scanf(%s,s-name);/*在當(dāng)前結(jié)點(diǎn)s的數(shù)據(jù)域中存儲(chǔ)姓名*/s-link=null;return(h);main()intnumber;/*保存人數(shù)的變量*/stud*head;/*head是保存單鏈表的表頭結(jié)點(diǎn)地址的指針*/number=n;head=creat(number);/*把所新建的單鏈表表頭地址賦給head*/這樣就寫好了一個(gè)可以建立包含n個(gè)人姓名的單鏈表了。寫動(dòng)態(tài)內(nèi)存分配的程序應(yīng)注意,請(qǐng)盡量對(duì)分配是否成功進(jìn)

18、行檢測(cè)。二、單鏈表的基本運(yùn)算建立了一個(gè)單鏈表之后,如果要進(jìn)行一些如插入、刪除等操作該怎么辦?所以還須掌握一些單鏈表的基本算法,來(lái)實(shí)現(xiàn)這些操作。單鏈表的基本運(yùn)算包括:查找、插入和刪除。下面我們就介紹這三種基本運(yùn)算的算法,并結(jié)合我們建立單鏈表的例子寫出相應(yīng)的程序。1、查找對(duì)單鏈表進(jìn)行查找的思路為:對(duì)單鏈表的結(jié)點(diǎn)依次掃描,檢測(cè)其數(shù)據(jù)域是否是我們所要查好的,若是返回該結(jié)點(diǎn)的,否則返回nullo因?yàn)樵趩捂湵淼逆溣蛑邪撕罄^結(jié)點(diǎn)的存儲(chǔ)地址,所以當(dāng)我們實(shí)現(xiàn)的時(shí)候,只要知道該單鏈表的頭,即可依次對(duì)每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域進(jìn)行檢測(cè)。以下是應(yīng)用查找算法的一個(gè)例子:/prep/ppre>2、插入(后插)假設(shè)在一個(gè)單

19、鏈表中存在2個(gè)連續(xù)結(jié)點(diǎn)p、q(其中p為q的直接前驅(qū)),若我們需要在p、q之間插入一個(gè)新結(jié)點(diǎn)s,那么我們必須先為s分配空間并賦,然后使p的鏈域存儲(chǔ)s的地址,s的鏈域存儲(chǔ)q的地址即可。(p-link=s;s-link=q),這樣就完成了插入操作。下例是應(yīng)用插入算法的一個(gè)例子:#includestdio.h#includemalloc.h#includestring.h#definen10typedefstructnodecharname20;structnode*link;stud;stud*creat(intn)/*建立單鏈表的函數(shù)*/stud*p,*h,*s;inti;if(h=(stud*)

20、malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);h-name0=0h-link=null;for(i=0;ii+)if(s=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);p-link=s;printf(請(qǐng)輸入第%d個(gè)人的姓名:,i+1);scanf(%s,s-name);s-link=null;return(h);stud*search(stud*h,char*x)/*查找函數(shù)*/stud*p;char*y;p=h-link;while(p!=null)y=p-name;if(s

21、trcmp(y,x)=0)return(p);elsep=p-link;if(p=null)printf(沒有查找到該數(shù)據(jù)!voidinsert(stud*p)/*插入函數(shù),在指針p后插入*/charstuname20;stud*s;/*指針s是保存新結(jié)點(diǎn)地址的*/if(s=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);printf(請(qǐng)輸入你要插入的人的姓名:scanf(%s,stuname);strcpy(s-name,stuname);/*把指針stuname所指向的數(shù)組元素拷貝給新結(jié)點(diǎn)的數(shù)據(jù)域*/s-link=p-link

22、;/*把新結(jié)點(diǎn)的鏈域指向原來(lái)p結(jié)點(diǎn)的后繼結(jié)點(diǎn)*/p-link=s;/*p結(jié)點(diǎn)的鏈域指向新結(jié)點(diǎn)*/main()intnumber;charfullname20;/*保存輸入的要查找的人的姓名*/stud*head,*searchpoint;number=n;head=creat(number);/*建立新鏈表并返回表頭指針*/printf(請(qǐng)輸入你要查找的人的姓名:scanf(%s,fullname);searchpoint=search(head,fullname);/*查找并返回查找到的結(jié)點(diǎn)指針*/insert(searchpoint);/*調(diào)用插入函數(shù)*/3、刪除假如我們已經(jīng)知道了要?jiǎng)h除的

23、結(jié)點(diǎn)p的位置,那么要?jiǎng)h除p結(jié)點(diǎn)時(shí)只要令p結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)的鏈域由存儲(chǔ)p結(jié)點(diǎn)的地址該為存儲(chǔ)p的后繼結(jié)點(diǎn)的地址,并回收p結(jié)點(diǎn)即可。以下便是應(yīng)用刪除算法的實(shí)例:#includestdio.h#includemalloc.h#includestring.h#definen10typedefstructnodecharname20;structnode*link;stud;stud*creat(intn)/*建立新的鏈表的函數(shù)*/stud*p,*h,*s;inti;if(h=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);h-name0=0h

24、-link=null;for(i=0;ii+)if(s=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);p-link=s;printf(請(qǐng)輸入第%d個(gè)人的姓名,i+1);scanf(%s,s-name);s-link=null;return(h);stud*search(stud*h,char*x)/*查找函數(shù)*/stud*p;char*y;p=h-link;while(p!=null)y=p-name;if(strcmp(y,x)=0)return(p);elsep=p-link;if(p=null)printf(沒有查找到該數(shù)

25、據(jù)!stud*search2(stud*h,char*x)/*另一個(gè)查找函數(shù),返回的是上一個(gè)查找函數(shù)的直接前驅(qū)結(jié)點(diǎn)的指針,*/*h為表頭指針,x為指向要查找的姓名的指針*/*其實(shí)此函數(shù)的算法與上面的查找算法是一樣的,只是多了一個(gè)指針s,并且s總是指向指針p所指向的結(jié)點(diǎn)的直接前驅(qū),*/*結(jié)果返回s即是要查找的結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)*/stud*p,*s;char*y;p=h-link;while(p!=null)y=p-name;if(strcmp(y,x)=0)return(s);p=p-link;s=s-link;if(p=null)printf(沒有查找到該數(shù)據(jù)!voiddel(stud*x,s

26、tud*y)/*刪除函數(shù),其中y為要?jiǎng)h除的結(jié)點(diǎn)的指針,x為要?jiǎng)h除的結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)的指針*/stud*s;x-link=y-link;free(s);main()intnumber;charfullname20;stud*head,*searchpoint,*forepoint;number=n;head=creat(number);printf(請(qǐng)輸入你要?jiǎng)h除的人的姓名:scanf(%s,fullname);searchpoint=search(head,fullname);forepoint=search2(head,fullname);del(forepoint,searchpoint)

27、;一、循環(huán)鏈表循環(huán)鏈表是與單鏈表一樣,是一種鏈?zhǔn)降拇鎯?chǔ)結(jié)構(gòu),所不同的是,循環(huán)鏈表的最后一個(gè)結(jié)點(diǎn)的是指向該循環(huán)鏈表的第一個(gè)結(jié)點(diǎn)或者表頭結(jié)點(diǎn),從而構(gòu)成一個(gè)環(huán)形的鏈。循環(huán)鏈表的運(yùn)算與單鏈表的運(yùn)算基本一致。所不同的有以下幾點(diǎn):1、在建立一個(gè)循環(huán)鏈表時(shí),必須使其最后一個(gè)結(jié)點(diǎn)的指向表頭結(jié)點(diǎn),而不是象單鏈表那樣置為nullo此種情況還使用于在最后一個(gè)結(jié)點(diǎn)后插入一個(gè)新的結(jié)點(diǎn)。2、在判斷是否到表尾時(shí),是判斷該結(jié)點(diǎn)鏈域的是否是表頭結(jié)點(diǎn),當(dāng)鏈域等于表頭時(shí),說(shuō)明已到表尾。而非象單鏈表那樣判斷鏈域是否為null。二、雙向鏈表雙向鏈表其實(shí)是單鏈表的改進(jìn)。當(dāng)我們對(duì)單鏈表進(jìn)行操作時(shí),有時(shí)你要對(duì)某個(gè)結(jié)點(diǎn)的直接前驅(qū)進(jìn)行操作時(shí),又

28、必須從表頭開始查找。這是由單鏈表結(jié)點(diǎn)的結(jié)構(gòu)所限制的。因?yàn)閱捂湵砻總€(gè)結(jié)點(diǎn)只有一個(gè)存儲(chǔ)直接后繼結(jié)點(diǎn)地址的鏈域,那么能不能定義一個(gè)既有存儲(chǔ)直接后繼結(jié)點(diǎn)地址的鏈域,又有存儲(chǔ)直接前驅(qū)結(jié)點(diǎn)地址的鏈域的這樣一個(gè)雙鏈域結(jié)點(diǎn)結(jié)構(gòu)呢?這就是雙向鏈表。在雙向鏈表中,結(jié)點(diǎn)除含有數(shù)據(jù)域外,還有兩個(gè)鏈域,一個(gè)存儲(chǔ)直接后繼結(jié)點(diǎn)地址,一般稱之為右鏈域;一個(gè)存儲(chǔ)直接前驅(qū)結(jié)點(diǎn)地址,一般稱之為左鏈域。在c語(yǔ)言中雙向鏈表結(jié)點(diǎn)類型可以定義為:typedefstructnodeintdata;/*數(shù)據(jù)域*/structnode*llink,*rlink;/*鏈域,*llink是左鏈域,*rlink是右鏈域*/jd;當(dāng)然,也可以把一個(gè)雙向

29、鏈表構(gòu)建成一個(gè)雙向循環(huán)鏈表。雙向鏈表與單向鏈表一樣,也有三種基本運(yùn)算:查找、插入和刪除。雙向鏈表的基本運(yùn)算:1、查找假若我們要在一個(gè)帶表頭的雙向循環(huán)鏈表中查找數(shù)據(jù)域?yàn)橐惶囟ǖ哪硞€(gè)結(jié)點(diǎn)時(shí),我們同樣從表頭結(jié)點(diǎn)往后依次比較各結(jié)點(diǎn)數(shù)據(jù)域的,若正是該特定,則返回指向結(jié)點(diǎn)的,否則繼續(xù)往后查,直到表尾。下例就是應(yīng)用雙向循環(huán)鏈表查找算法的一個(gè)程序。#includestdio.h#includemalloc.h#definen10typedefstructnodecharname20;structnode*llink,*rlink;stud;stud*creat(intn)stud*p,*h,*s;inti;i

30、f(h=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);h-name0=0h-llink=null;h-rlink=null;for(i=0;ii+)if(s=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);p-rlink=s;printf(請(qǐng)輸入第%d個(gè)人的姓名,i+1);scanf(%s,s-name);s-llink=p;s-rlink=null;h-llink=s;p-rlink=h;return(h);stud*search(stud*h,char*x)st

31、ud*p;char*y;p=h-rlink;while(p!=h)y=p-name;if(strcmp(y,x)=0)return(p);elsep=p-rlink;printf(沒有查找到該數(shù)據(jù)!voidprint(stud*h)intn;stud*p;p=h-rlink;printf(數(shù)據(jù)信息為:while(p!=h)printf(%s,*(p-name);p=p-rlink;printf(main()intnumber;charstudname20;stud*head,*searchpoint;number=n;clrscr();head=creat(number);print(head

32、);printf(請(qǐng)輸入你要查找的人的姓名:scanf(%s,studname);searchpoint=search(head,studname);printf(你所要查找的人的姓名是:%s,*searchpoint-name);2、插入對(duì)于雙向循環(huán)鏈表,我們現(xiàn)在可以隨意地在某已知結(jié)點(diǎn)p前或者p后插入一個(gè)新的結(jié)點(diǎn)。假若s,p,q是連續(xù)三個(gè)結(jié)點(diǎn)的,若我們要在p前插入一個(gè)新結(jié)點(diǎn)r,則只需把s的右鏈域指向r,r的左鏈域指向s,r的右鏈域指向p,p的左鏈域指向r即可。在p,q之間插入原理也一樣。下面就是一個(gè)應(yīng)用雙向循環(huán)鏈表插入算法的例子:#includestdio.h#includemalloc.h

33、#includestring.h#definen10typedefstructnodecharname20;structnode*llink,*rlink;stud;stud*creat(intn)stud*p,*h,*s;inti;if(h=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);h-name0=0h-llink=null;h-rlink=null;for(i=0;ii+)if(s=(stud*)malloc(sizeof(stud)=null)printf(不能分配傳存空間!exit(0);p-rlink=s;prin

34、tf(請(qǐng)輸入第%d個(gè)人的姓名,i+1);scanf(%s,s-name);s-llink=p;s-rlink=null;h-llink=s;p-rlink=h;return(h);stud*search(stud*h,char*x)stud*p;char*y;p=h-rlink;while(p!=h)y=p-name;if(strcmp(y,x)=0)return(p);elsep=p-rlink;printf(沒有查找到該數(shù)據(jù)!voidprint(stud*h)intn;stud*p;p=h-rlink;printf(數(shù)據(jù)信息為:while(p!=h)printf(%s,*(p-name);

35、p=p-rlink;printf(voidinsert(stud*p)charstuname20;stud*s;if(s=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!exit(0);printf(請(qǐng)輸入你要插入的人的姓名:scanf(%s,stuname);strcpy(s-name,stuname);s-rlink=p-rlink;p-rlink=s;s-llink=p;(s-rlink)-llink=s;main()intnumber;charstudname20;stud*head,*searchpoint;number=n;clrsc

36、r();head=creat(number);print(head);printf(請(qǐng)輸入你要查找的人的姓名:scanf(%s,studname);searchpoint=search(head,studname);printf(你所要查找的人的姓名是:%s,*searchpoint-name);insert(searchpoint);print(head);3、刪除刪除某個(gè)結(jié)點(diǎn),其實(shí)就是插入某個(gè)結(jié)點(diǎn)的逆操作。還是對(duì)于雙向循環(huán)鏈表,要在連續(xù)的三個(gè)結(jié)點(diǎn)s,p,q中刪除p結(jié)點(diǎn),只需把s的右鏈域指向q,q的左鏈域指向s,并收回p結(jié)點(diǎn)就完成了。下面就是一個(gè)應(yīng)用雙向循環(huán)鏈表刪除算法的例子:#includ

37、e#include#include#definen10【篇三:c鏈表的應(yīng)用例子】鏈表的c語(yǔ)言實(shí)現(xiàn)(一)準(zhǔn)備:動(dòng)態(tài)內(nèi)存分配一、為什么用動(dòng)態(tài)內(nèi)存分配但我們未學(xué)習(xí)鏈表的時(shí)候,如果要存儲(chǔ)數(shù)量比較多的同類型或同結(jié)構(gòu)的數(shù)據(jù)的時(shí)候,總是使用一個(gè)數(shù)組。比如說(shuō)我們要存儲(chǔ)一個(gè)班級(jí)學(xué)生的某科分?jǐn)?shù),總是定義一個(gè)float型(存在0.5分)數(shù)組:floatscore30;但是,在使用數(shù)組的時(shí)候,總有一個(gè)問題困擾著我們:數(shù)組應(yīng)該有多大?在很多的情況下,你并不能確定要使用多大的數(shù)組,比如上例,你可能并不知道該班級(jí)的學(xué)生的人數(shù),那么你就要把數(shù)組定義得足夠大。這樣,你的程序在運(yùn)行時(shí)就申請(qǐng)了固定大小的你認(rèn)為足夠大的內(nèi)存空間。即使

38、你知道該班級(jí)的學(xué)生數(shù),但是如果因?yàn)槟撤N特殊原因人數(shù)有增加或者減少,你又必須重新去修改程序,擴(kuò)大數(shù)組的存儲(chǔ)范圍。這種分配固定大小的內(nèi)存分配方法稱之為靜態(tài)內(nèi)存分配。但是這種內(nèi)存分配的方法存在比較嚴(yán)重的缺陷,特別是處理某些問題時(shí):在大多數(shù)情況下會(huì)浪費(fèi)大量的內(nèi)存空間,在少數(shù)情況下,當(dāng)你定義的數(shù)組不夠大時(shí),可能引起下標(biāo)越界錯(cuò)誤,甚至導(dǎo)致嚴(yán)重后果。那么有沒有其它的方法來(lái)解決這樣的外呢體呢?有,那就是動(dòng)態(tài)內(nèi)存分配。所謂動(dòng)態(tài)內(nèi)存分配就是指在程序執(zhí)行的過程中動(dòng)態(tài)地分配或者回收存儲(chǔ)空間的分配內(nèi)存的方法。動(dòng)態(tài)內(nèi)存分配不象數(shù)組等靜態(tài)內(nèi)存分配方法那樣需要預(yù)先分配存儲(chǔ)空間,而是由系統(tǒng)根據(jù)程序的需要即時(shí)分配,且分配的大小就

39、是程序要求的大小。從以上動(dòng)、靜態(tài)內(nèi)存分配比較可以知道動(dòng)態(tài)內(nèi)存分配相對(duì)于景泰內(nèi)存分配的特點(diǎn):1、不需要預(yù)先分配存儲(chǔ)空間;2、分配的空間可以根據(jù)程序的需要擴(kuò)大或縮小。二、如何實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配及其管理要實(shí)現(xiàn)根據(jù)程序的需要?jiǎng)討B(tài)分配存儲(chǔ)空間,就必須用到以下幾個(gè)1、mallocmalloc的原型為:void*malloc(unsignedintsize)其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間其參數(shù)是一個(gè)無(wú)符號(hào)整形數(shù),返回值是一個(gè)指向所分配的連續(xù)存儲(chǔ)域的起始地址的。還有一點(diǎn)必須注意的是,當(dāng)未能成功分配存儲(chǔ)空間(如內(nèi)存不足)就會(huì)返回一個(gè)null。所以在調(diào)用該時(shí)應(yīng)該檢測(cè)返回值是否為null

40、并執(zhí)行相應(yīng)的操作。下例是一個(gè)動(dòng)態(tài)分配的程序:#include#includemain()(intcount,*array;/*count是一個(gè)計(jì)數(shù)器,array是一個(gè)整型指針,也可以理解為指向一個(gè)整型數(shù)組的首地址*/if(array(int*)malloc(10*sizeof(int)=null)(printf(不能成功分配存儲(chǔ)空間。);exit(1);for(count=0;count10;count+)/*給數(shù)組賦值*/arraycount=count;for(count=0;count10;count+)/*打印數(shù)組元素*/printf(%2d,arraycount);上例中動(dòng)態(tài)分配了1

41、0個(gè)整型存儲(chǔ)區(qū)域,然后進(jìn)行賦值并打印。例中if(array(int*)malloc(10*sizeof(int)=null)語(yǔ)句可以分為以下幾步:分配10個(gè)整型的連續(xù)存儲(chǔ)空間,并返回一個(gè)指向其起始地址的整型把此整型地址賦給array檢測(cè)返回值是否為null2、free由于內(nèi)存區(qū)域總是有限的,不能不限制地分配下去,而且一個(gè)程序要盡量節(jié)省資源,所以當(dāng)所分配的內(nèi)存區(qū)域不用時(shí),就要釋放它,以便其它的變量或者程序使用。這時(shí)我們就要用到free。其原型是:voidfree(void*p)作用是釋放p所指向的內(nèi)存區(qū)。其參數(shù)p必須是先前調(diào)用malloc或calloc(另一個(gè)動(dòng)態(tài)分配存儲(chǔ)區(qū)域的)時(shí)返回的。給fr

42、ee傳遞其它的值很可能造成死機(jī)或其它災(zāi)難性的后果。注意:這里重要的是的值,而不是用來(lái)申請(qǐng)動(dòng)態(tài)內(nèi)存的本身。例:int*p1,*p2;p1=malloc(10*sizeof(int);p2=p1;free(p2)/*或者free(p2)*/malloc返回值賦給p1,又把p1的值賦給p2,所以此時(shí)p1,p2都可作為free的參數(shù)。malloc是對(duì)存儲(chǔ)區(qū)域進(jìn)行分配的。free是釋放已經(jīng)不用的內(nèi)存區(qū)域的。所以由這兩個(gè)就可以實(shí)現(xiàn)對(duì)內(nèi)存區(qū)域進(jìn)行動(dòng)態(tài)分配并進(jìn)行簡(jiǎn)單的管理了。一、單鏈表的建立有了動(dòng)態(tài)內(nèi)存分配的基礎(chǔ),要實(shí)現(xiàn)鏈表就不難了。所謂鏈表,就是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表元素的一種。鏈表又分為單鏈表、雙

43、向鏈表和循環(huán)鏈表等。我們先講講單鏈表。所謂單鏈表,是指數(shù)據(jù)接點(diǎn)是單向排列的。一個(gè)單鏈表結(jié)點(diǎn),其結(jié)構(gòu)類型分為兩部分:1、數(shù)據(jù)域:用來(lái)存儲(chǔ)本身數(shù)據(jù)2、鏈域或稱為域:用來(lái)存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址或者說(shuō)指向其直接后繼的。例:typedefstructnode(charname20;structnode*link;stud;這樣就定義了一個(gè)單鏈表的結(jié)構(gòu),其中charname20是一個(gè)用來(lái)存儲(chǔ)姓名的字符型數(shù)組,*link是一個(gè)用來(lái)存儲(chǔ)其直接后繼的。定義好了鏈表的結(jié)構(gòu)之后,只要在程序運(yùn)行的時(shí)候愛數(shù)據(jù)域中存儲(chǔ)適當(dāng)?shù)臄?shù)據(jù),如有后繼結(jié)點(diǎn),則把鏈域指向其直接后繼,若沒有,則置為null。下面就來(lái)看一個(gè)建立帶表頭(若未說(shuō)明

44、,以下所指鏈表均帶表頭)的單鏈表的完整程序。#includestdio.h#includemalloc.h/*包含動(dòng)態(tài)內(nèi)存分配函數(shù)的頭文件*/#definen10/*n為人數(shù)*/typedefstructnode(charname20;structnode*link;stud;stud*creat(intn)/*建立單鏈表的函數(shù),形參n為人數(shù)*/(stud*p,*h,*s;/*h保存表頭結(jié)點(diǎn)的指針,*p指向當(dāng)前結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn),*s指向當(dāng)前結(jié)點(diǎn)*/inti;/*計(jì)數(shù)器*/if(h=(stud*)malloc(sizeof(stud)=null)/*分配空間并檢測(cè)*/(printf(不能分配內(nèi)存

45、空間!);exit(0);h-name0=0;/*把表頭結(jié)點(diǎn)的數(shù)據(jù)域置空*/h-link=null;/*把表頭結(jié)點(diǎn)的鏈域置空*/p=h;/*p指向表頭結(jié)點(diǎn)*/for(i=0;ii+)(if(s=(stud*)malloc(sizeof(stud)=null)/*分配新存儲(chǔ)空間并檢測(cè)*/(printf(不能分配內(nèi)存空間!);exit(0);p-link=s;/*把s的地址賦給p所指向的結(jié)點(diǎn)的鏈域,這樣就把p和s所指向的結(jié)點(diǎn)連接起來(lái)了*/printf(請(qǐng)輸入第%d個(gè)人的姓名,i+1);scanf(%s,s-name);/*在當(dāng)前結(jié)點(diǎn)s的數(shù)據(jù)域中存儲(chǔ)姓名*/s-link=null;p=s;retur

46、n(h);main()(intnumber;/*保存人數(shù)的變量*/stud*head;/*head是保存單鏈表的表頭結(jié)點(diǎn)地址的指針*/number=n;head=creat(number);/*把所新建的單鏈表表頭地址賦給head*/這樣就寫好了一個(gè)可以建立包含n個(gè)人姓名的單鏈表了。寫動(dòng)態(tài)內(nèi)存分配的程序應(yīng)注意,請(qǐng)盡量對(duì)分配是否成功進(jìn)行檢測(cè)。二、單鏈表的基本運(yùn)算建立了一個(gè)單鏈表之后,如果要進(jìn)行一些如插入、刪除等操作該怎么辦?所以還須掌握一些單鏈表的基本算法,來(lái)實(shí)現(xiàn)這些操作。單鏈表的基本運(yùn)算包括:查找、插入和刪除。下面我們就介紹這三種基本運(yùn)算的算法,并結(jié)合我們建立單鏈表的例子寫出相應(yīng)的程序。1、查

47、找null對(duì)單鏈表進(jìn)行查找的思路為:對(duì)單鏈表的結(jié)點(diǎn)依次掃描,檢測(cè)其數(shù)據(jù)域是否是我們所要查好的值,若是返回該結(jié)點(diǎn)的,否則返回因?yàn)樵趩捂湵淼逆溣蛑邪撕罄^結(jié)點(diǎn)的存儲(chǔ)地址,所以當(dāng)我們實(shí)現(xiàn)的時(shí)候,只要知道該單鏈表的頭,即可依次對(duì)每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域進(jìn)行檢測(cè)。以下是應(yīng)用查找算法的一個(gè)例子:#includestdio.h#includemalloc.h#includestring.h/*包含一些字符串處理函數(shù)的頭文件*/#definen10typedefstructnode(charname20;structnode*link;stud;stud*creat(intn)/*建立鏈表的函數(shù)*/(stud*p,

48、*h,*s;inti;if(h=(stud*)malloc(sizeof(stud)=null)(printf(不能分配內(nèi)存空間!);exit(0);h-name0=0;h-link=null;p=h;for(i=0;ii+)(if(s=(stud*)malloc(sizeof(stud)=null)(printf(不能分配內(nèi)存空間!);exit(0);p-link=s;printf(請(qǐng)輸入第%d個(gè)人的姓名,i+1);scanf(%s,s-name);s-link=null;p=s;return(h);stud*search(stud*h,char*x)/*查找鏈表的函數(shù),其中h指針是鏈表的表

49、頭指針,x指針是要查找的人的姓名*/(stud*p;/*當(dāng)前指針,指向要與所查找的姓名比較的結(jié)點(diǎn)*/char*y;/*保存結(jié)點(diǎn)數(shù)據(jù)域內(nèi)姓名的指針*/p=h-link;while(p!=null)(y=p-name;if(strcmp(y,x)=0)/*把數(shù)據(jù)域里的姓名與所要查找的姓名比較,若相同則返回0,即條件成立*/return(p);/*返回與所要查找結(jié)點(diǎn)的地址*/elsep=p-link;if(p=null)printf(沒有查找到該數(shù)據(jù)!);main()(intnumber;charfullname20;stud*head,*searchpoint;/*head是表頭指針,search

50、point是保存符合條件的結(jié)點(diǎn)地址的指針*/number=n;head=creat(number);printf(請(qǐng)輸入你要查找的人的姓名:);scanf(%s,fullname);searchpoint=search(head,fullname);/*調(diào)用查找函數(shù),并把結(jié)果賦給searchpoint指針*/2、插入(后插)假設(shè)在一個(gè)單鏈表中存在2個(gè)連續(xù)結(jié)點(diǎn)p、q(其中p為q的直接前驅(qū)),若我們需要在p、q之間插入一個(gè)新結(jié)點(diǎn)s,那么我們必須先為s分配空間并賦值,然后使p的鏈域存儲(chǔ)s的地址,s的鏈域存儲(chǔ)q的地址即可。(p-link=s;s-link=q),這樣就完成了插入操作。下例是應(yīng)用插入算法

51、的一個(gè)例子:#includestdio.h#includemalloc.h#includestring.h#definen10typedefstructnode(charname20;structnode*link;stud;stud*creat(intn)/*建立單鏈表的函數(shù)*/(stud*p,*h,*s;inti;if(h=(stud*)malloc(sizeof(stud)=null)(printf(不能分配內(nèi)存空間!);exit(0);h-name0=0;h-link=null;p=h;for(i=0;ii+)(if(s=(stud*)malloc(sizeof(stud)=null)

52、(printf(不能分配內(nèi)存空間!);exit(0);p-link=s;printf(請(qǐng)輸入第%d個(gè)人的姓名:,i+1);scanf(%s,s-name);s-link=null;p=s;return(h);stud*search(stud*h,char*x)/*查找函數(shù)*/(stud*p;char*y;p=h-link;while(p!=null)(y=p-name;if(strcmp(y,x)=0)return(p);elsep=p-link;if(p=null)printf(沒有查找到該數(shù)據(jù)!);voidinsert(stud*p)/*插入函數(shù),在指針p后插入*/(charstuname

53、20;stud*s;/*指針s是保存新結(jié)點(diǎn)地址的*/if(s=(stud*)malloc(sizeof(stud)=null)(printf(不能分配內(nèi)存空間!);exit(0);printf(請(qǐng)輸入你要插入的人的姓名:);scanf(%s,stuname);strcpy(s-name,stuname);/*把指針stuname所指向的數(shù)組元素拷貝給新結(jié)點(diǎn)的數(shù)據(jù)域*/s-link=p-link;/*把新結(jié)點(diǎn)的鏈域指向原來(lái)p結(jié)點(diǎn)的后繼結(jié)點(diǎn)*/p-link=s;/*p結(jié)點(diǎn)的鏈域指向新結(jié)點(diǎn)*/main()(intnumber;charfullname20;/*保存輸入的要查找的人的姓名*/stud*

54、head,*searchpoint;number=n;head=creat(number);/*建立新鏈表并返回表頭指針*/printf(請(qǐng)輸入你要查找的人的姓名:);scanf(%s,fullname);searchpoint=search(head,fullname);/*查找并返回查找到的結(jié)點(diǎn)指針*/insert(searchpoint);/*調(diào)用插入函數(shù)*/3、刪除假如我們已經(jīng)知道了要?jiǎng)h除的結(jié)點(diǎn)p的位置,那么要?jiǎng)h除p結(jié)點(diǎn)時(shí)只要令p結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)的鏈域由存儲(chǔ)p結(jié)點(diǎn)的地址該為存儲(chǔ)p的后繼結(jié)點(diǎn)的地址,并回收p結(jié)點(diǎn)即可。以下便是應(yīng)用刪除算法的實(shí)例:#includestdio.h#include

55、malloc.h#includestring.h#definen10typedefstructnodecharname20;structnode*link;stud;stud*creat(intn)/*建立新的鏈表的函數(shù)*/stud*p,*h,*s;inti;if(h=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!);exit(0);h-name0=0;h-link=null;p=h;for(i=0;ii+)if(s=(stud*)malloc(sizeof(stud)=null)printf(不能分配內(nèi)存空間!);exit(0);p-link

56、=s;printf(請(qǐng)輸入第%d個(gè)人的姓名,i+1);scanf(%s,s-name);s-link=null;p=s;return(h);stud*search(stud*h,char*x)/*查找函數(shù)*/(stud*p;char*y;p=h-link;while(p!=null)(y=p-name;if(strcmp(y,x)=0)return(p);elsep=p-link;if(p=null)printf(沒有查找到該數(shù)據(jù)!);stud*search2(stud*h,char*x)/*另一個(gè)查找函數(shù),返回的是上一個(gè)查找函數(shù)的直接前驅(qū)結(jié)點(diǎn)的指針,*/*h為表頭指針,x為指向要查找的姓名的

57、指針*/*其實(shí)此函數(shù)的算法與上面的查找算法是一樣的,只是多了一個(gè)指針s,并且s總是指向指針p所指向的結(jié)點(diǎn)的直接前驅(qū),*/*結(jié)果返回s即是要查找的結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)*/(stud*p,*s;char*y;p=h-link;s=h;while(p!=null)(y=p-name;if(strcmp(y,x)=0)return(s);else(p=p-link;s=s-link;if(p=null)printf(沒有查找到該數(shù)據(jù)!);voiddel(stud*x,stud*y)/*刪除函數(shù),其中y為要?jiǎng)h除的結(jié)點(diǎn)的指針,x為要?jiǎng)h除的結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)的指針*/stud*s;s=y;x-link=y-lin

58、k;free(s);main()intnumber;charfullname20;stud*head,*searchpoint,*forepoint;number=n;head=creat(number);printf(請(qǐng)輸入你要?jiǎng)h除的人的姓名:);scanf(%s,fullname);searchpoint=search(head,fullname);forepoint=search2(head,fullname);del(forepoint,searchpoint);一、循環(huán)鏈表循環(huán)鏈表是與單鏈表一樣,是一種鏈?zhǔn)降拇鎯?chǔ)結(jié)構(gòu),所不同的是,循環(huán)鏈表的最后一個(gè)結(jié)點(diǎn)的是指向該循環(huán)鏈表的第一個(gè)結(jié)點(diǎn)或者表頭結(jié)點(diǎn),從而構(gòu)成一個(gè)環(huán)形的鏈。循環(huán)鏈表的運(yùn)算與單鏈表的運(yùn)算基本一致。所不同的有以下幾點(diǎn):1、在建

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論