隨筆-144  評論-80  文章-1  trackbacks-0

          鏈表的運算(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++
          主站蜘蛛池模板: 云龙县| 田阳县| 五寨县| 内乡县| 中方县| 石首市| 微博| 米林县| 福州市| 灵山县| 出国| 肇州县| 盐城市| 临漳县| 洪泽县| 广灵县| 台东市| 类乌齐县| 峨边| 通道| 井研县| 鄱阳县| 邳州市| 临江市| 塔城市| 安岳县| 肥西县| 聂荣县| 文登市| 曲周县| 荥经县| 房山区| 栖霞市| 绵竹市| 宁晋县| 郑州市| 个旧市| 巩留县| 宽甸| 芷江| 巴楚县|