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

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