隨筆-144  評(píng)論-80  文章-1  trackbacks-0

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

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

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



          1.設(shè)計(jì)一個(gè)程序?qū)⑤斎氲臄?shù)據(jù)建立成鏈表、輸出鏈表數(shù)據(jù)并在程序結(jié)束后釋放。
          解:
          ??? 1)鏈表的建立:先聲明一個(gè)首節(jié)點(diǎn)Head,并將Head->Next設(shè)為NULL。每輸入一個(gè)數(shù)據(jù)就聲明一個(gè)新節(jié)點(diǎn)New,把New->Next設(shè)為NULL,并且鏈接到之前列表的尾端。
          ??? 2)鏈表數(shù)據(jù)的輸出:先將Pointer節(jié)點(diǎn)的指針指向第一個(gè)節(jié)點(diǎn),將Pointer節(jié)點(diǎn)(即第一個(gè)節(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)的指針指向第一個(gè)節(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;?? /*指向下一個(gè)節(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;???? /*指向下一個(gè)節(jié)點(diǎn)*/
          ??? }
          }
          /*建立鏈表*/
          Link Create_List(Link Head)
          {
          ??? int DataNum;???????? /*數(shù)據(jù)編號(hào)*/
          ??? 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ù)編號(hào)*/
          ??????? printf("Please input the data name:");
          ??????? scanf("%s",DataName);
          ??????? Head->Number=DataNum;???? /*定義首節(jié)點(diǎn)數(shù)據(jù)編號(hào)*/
          ??????? 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ù)編號(hào)遞增*/
          ??????????? 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 小力力力 閱讀(2663) 評(píng)論(0)  編輯  收藏 所屬分類: C/C++
          主站蜘蛛池模板: 南宁市| 科技| 南乐县| 马山县| 罗田县| 麻阳| 黄冈市| 汉阴县| 拜泉县| 中方县| 全南县| 邓州市| 九寨沟县| 石门县| 忻城县| 元谋县| 泸定县| 阜康市| 广安市| 保康县| 柘城县| 庄河市| 连江县| 凌源市| 固阳县| 龙陵县| 高密市| 尉犁县| 营山县| 陵川县| 稻城县| 曲阳县| 宜昌市| 城固县| 金门县| 常德市| 萨迦县| 民和| 遂平县| 礼泉县| 临洮县|