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

          鏈表的運(yùn)算(01)

          發(fā)表日期:2003年4月8日????作者:C語言之家搜集整理??已經(jīng)有3901位讀者讀過此文

          1.設(shè)計(jì)一個程序?qū)⑤斎氲臄?shù)據(jù)建立成鏈表、輸出鏈表數(shù)據(jù)并在程序結(jié)束后釋放。
          2.設(shè)計(jì)一個查找鏈表中的數(shù)據(jù)的程序



          1.設(shè)計(jì)一個程序?qū)⑤斎氲臄?shù)據(jù)建立成鏈表、輸出鏈表數(shù)據(jù)并在程序結(jié)束后釋放。
          解:
          ??? 1)鏈表的建立:先聲明一個首節(jié)點(diǎn)Head,并將Head->Next設(shè)為NULL。每輸入一個數(shù)據(jù)就聲明一個新節(jié)點(diǎn)New,把New->Next設(shè)為NULL,并且鏈接到之前列表的尾端。
          ??? 2)鏈表數(shù)據(jù)的輸出:先將Pointer節(jié)點(diǎn)的指針指向第一個節(jié)點(diǎn),將Pointer節(jié)點(diǎn)(即第一個節(jié)點(diǎn))的數(shù)據(jù)輸出。然后再將Pointer節(jié)點(diǎn)的指針指向Pointer指針的的指針(即下一節(jié)點(diǎn)),將pointer節(jié)點(diǎn)(即第一節(jié)點(diǎn))的數(shù)據(jù)輸出。重復(fù)執(zhí)行此步聚直到Pointer指針指向NULL為止。
          ??? 3)鏈表的釋放:先將Pointer節(jié)點(diǎn)的指針指向第一個節(jié)點(diǎn),然后再將首節(jié)點(diǎn)設(shè)為首節(jié)點(diǎn)的指針(即下一節(jié)點(diǎn))。將Pointer節(jié)點(diǎn)(即第一節(jié)點(diǎn))釋放。重復(fù)執(zhí)行此步聚直到首節(jié)點(diǎn)的指針指向NULL為止。
          程序代碼如下:
          #include<stdlib.h>
          #include<stdio.h>
          #define Max 10
          struct List???????????? /*節(jié)點(diǎn)結(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é)點(diǎn)聲明*/
          ??? while(Head!=NULL)????? /*當(dāng)節(jié)點(diǎn)為NULL,結(jié)束循環(huán)*/
          ??? {
          ??????? Pointer=Head;
          ??????? Head=Head->Next;?? /*指向下一個節(jié)點(diǎn)*/
          ??????? free(Pointer);
          ????}
          }
          /*輸出鏈表*/
          void Print_List(Link Head)
          {
          ??? Link Pointer;????????? /*節(jié)點(diǎn)聲明*/
          ??? Pointer=Head;????????? /*Pointer指針設(shè)為首節(jié)點(diǎn)*/
          ??? while(Pointer!=NULL)?? /*當(dāng)節(jié)點(diǎn)為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é)點(diǎn)*/
          ??? }
          }
          /*建立鏈表*/
          Link Create_List(Link Head)
          {
          ??? int DataNum;???????? /*數(shù)據(jù)編號*/
          ??? char DataName[Max];??????? /*數(shù)據(jù)名稱*/
          ??? Link New;??????????? /*節(jié)點(diǎn)聲明*/
          ??? Link Pointer;??????? /*節(jié)點(diǎn)聲明*/
          ??? 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é)點(diǎn)數(shù)據(jù)編號*/
          ??????? for(i=0;i<=Max;i++)
          ??????????? Head->Name[i]=DataName[i];
          ??????? Head->Next=NULL;
          ??????? Pointer=Head;????????? /*Pointer指針設(shè)為首節(jié)點(diǎn)*/
          ??????? 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é)點(diǎn)串連在原列表尾端*/
          ??????????? Pointer=New;???????? /*列表尾端節(jié)點(diǎn)為新節(jié)點(diǎn)*/
          ??????? }
          ??? }
          ??? return Head;
          }
          /*主程序*/
          void main()
          {
          ??? Link Head;?????? /*節(jié)點(diǎn)聲明*/
          ??? Head=Create_List(Head);???? /*調(diào)用建立鏈表函數(shù)*/
          ??? if(Head!=NULL)
          ??? {
          ??????? Print_List(Head);????? /*調(diào)用輸出鏈表數(shù)據(jù)函數(shù)*/
          ??????? Free_List(Head);?????? /*調(diào)用釋放鏈表函數(shù)*/
          ??? }
          }

          運(yùn)行結(jié)果如下:

          posted on 2006-07-17 22:53 小力力力 閱讀(2659) 評論(0)  編輯  收藏 所屬分類: C/C++
          主站蜘蛛池模板: 简阳市| 柘城县| 栾城县| 舒城县| 太仆寺旗| 宾川县| 怀来县| 清流县| 常宁市| 湘西| 进贤县| 织金县| 蒲江县| 大洼县| 繁峙县| 大庆市| 五台县| 阜城县| 且末县| 华阴市| 达州市| 郯城县| 赣州市| 苗栗县| 大姚县| 巴南区| 抚州市| 文安县| 会同县| 正蓝旗| 务川| 习水县| 喀喇沁旗| 宁化县| 东兰县| 略阳县| 神池县| 长丰县| 漳州市| 广水市| 兴义市|