鏈表的運算(01)
|
|
發(fā)表日期:2003年4月8日????作者:C語言之家搜集整理??已經(jīng)有3901位讀者讀過此文 |
|
1.設(shè)計一個程序?qū)⑤斎氲臄?shù)據(jù)建立成鏈表、輸出鏈表數(shù)據(jù)并在程序結(jié)束后釋放。 2.設(shè)計一個查找鏈表中的數(shù)據(jù)的程序
1.設(shè)計一個程序?qū)⑤斎氲臄?shù)據(jù)建立成鏈表、輸出鏈表數(shù)據(jù)并在程序結(jié)束后釋放。 解: ??? 1)鏈表的建立:先聲明一個首節(jié)點Head,并將Head->Next設(shè)為NULL。每輸入一個數(shù)據(jù)就聲明一個新節(jié)點New,把New->Next設(shè)為NULL,并且鏈接到之前列表的尾端。 ??? 2)鏈表數(shù)據(jù)的輸出:先將Pointer節(jié)點的指針指向第一個節(jié)點,將Pointer節(jié)點(即第一個節(jié)點)的數(shù)據(jù)輸出。然后再將Pointer節(jié)點的指針指向Pointer指針的的指針(即下一節(jié)點),將pointer節(jié)點(即第一節(jié)點)的數(shù)據(jù)輸出。重復(fù)執(zhí)行此步聚直到Pointer指針指向NULL為止。 ??? 3)鏈表的釋放:先將Pointer節(jié)點的指針指向第一個節(jié)點,然后再將首節(jié)點設(shè)為首節(jié)點的指針(即下一節(jié)點)。將Pointer節(jié)點(即第一節(jié)點)釋放。重復(fù)執(zhí)行此步聚直到首節(jié)點的指針指向NULL為止。 程序代碼如下: #include<stdlib.h> #include<stdio.h> #define Max 10 struct List???????????? /*節(jié)點結(jié)構(gòu)聲明*/ { ??? int Number; ??? char Name[Max]; ??? struct List *Next; }; typedef struct List Node; typedef Node *Link; /*釋放鏈表*/ void Free_List(Link Head) { ??? Link Pointer;????? /*節(jié)點聲明*/ ??? while(Head!=NULL)????? /*當節(jié)點為NULL,結(jié)束循環(huán)*/ ??? { ??????? Pointer=Head; ??????? Head=Head->Next;?? /*指向下一個節(jié)點*/ ??????? free(Pointer); ????} } /*輸出鏈表*/ void Print_List(Link Head) { ??? Link Pointer;????????? /*節(jié)點聲明*/ ??? Pointer=Head;????????? /*Pointer指針設(shè)為首節(jié)點*/ ??? while(Pointer!=NULL)?? /*當節(jié)點為NULL結(jié)束循環(huán)*/ ??? { ??????? printf("##Input Data##\n"); ??????? printf("Data Number: %d\n",Pointer->Number); ??????? printf("Data Name: %s\n",Pointer->Name); ??????? Pointer=Pointer->Next;???? /*指向下一個節(jié)點*/ ??? } } /*建立鏈表*/ Link Create_List(Link Head) { ??? int DataNum;???????? /*數(shù)據(jù)編號*/ ??? char DataName[Max];??????? /*數(shù)據(jù)名稱*/ ??? Link New;??????????? /*節(jié)點聲明*/ ??? Link Pointer;??????? /*節(jié)點聲明*/ ??? int i; ??? Head=(Link)malloc(sizeof(Node));???? /*分配內(nèi)存*/ ??? if(Head==NULL) ??????? printf("Memory allocate Failure!\n");??? /*內(nèi)存分配夫敗*/ ??? else ??? { ??????? DataNum=1;????? /*初始數(shù)據(jù)編號*/ ??????? printf("Please input the data name:"); ??????? scanf("%s",DataName); ??????? Head->Number=DataNum;???? /*定義首節(jié)點數(shù)據(jù)編號*/ ??????? for(i=0;i<=Max;i++) ??????????? Head->Name[i]=DataName[i]; ??????? Head->Next=NULL; ??????? Pointer=Head;????????? /*Pointer指針設(shè)為首節(jié)點*/ ??????? while(1) ??????? { ??????????? DataNum++;???????? /*數(shù)據(jù)編號遞增*/ ??????????? New=(Link)malloc(sizeof(Node));???? /*分配內(nèi)存*/ ??????????? printf("Please input the data Name:"); ??????????? scanf("%s",DataName); ??????????? if(DataName[0]=='0')??? /*輸入0則結(jié)束*/ ??????????????? break; ??????????? New->Number=DataNum; ??????????? for(i=0;i<Max;i++) ??????????? { ??????????????? New->Name[i]=DataName[i]; ??????????? } ??????????? New->Next=NULL; ??????????? Pointer->Next=New;???? /*將新節(jié)點串連在原列表尾端*/ ??????????? Pointer=New;???????? /*列表尾端節(jié)點為新節(jié)點*/ ??????? } ??? } ??? return Head; } /*主程序*/ void main() { ??? Link Head;?????? /*節(jié)點聲明*/ ??? Head=Create_List(Head);???? /*調(diào)用建立鏈表函數(shù)*/ ??? if(Head!=NULL) ??? { ??????? Print_List(Head);????? /*調(diào)用輸出鏈表數(shù)據(jù)函數(shù)*/ ??????? Free_List(Head);?????? /*調(diào)用釋放鏈表函數(shù)*/ ??? } }
運行結(jié)果如下:

|
|
posted on 2006-07-17 22:53
小力力力 閱讀(2652)
評論(0) 編輯 收藏 所屬分類:
C/C++