隨筆-144  評論-80  文章-1  trackbacks-0
          2.設計一個查找鏈表中的數據的程序
          解:
          ????單鏈表中的數據查找,只能采用線性查找法往下一個節點查找。采用線性查找法查找鏈表中的數據時與數組不同的是,原來數組是用遞增數組索引來查找數據,在鏈表中是往下一個節點查找。
          程序代碼如下:
          #include<stdio.h>
          #include<stdlib.h>
          #define Max 10
          struct List????????/*結節點結構聲明*/???
          {
          ??? int Number;
          ??? int Total;
          ??? struct List *Next;
          };
          typedef struct List Node;
          typedef Node *Link;
          int Data[2][Max]=????????????? /*初始化數據*/
          ??????? {3,9,25,5,7,26,65,80,2,6,1050,3850,1000,5670,2250,9650,2380,
          ??????????? 1700,3000,2000};
          int SearchTime=0;??????? /*查找次數*/
          /*鏈表查找*/
          int List_Search(int Key,Link Head)
          {
          ??? Link Pointer;
          ??? Pointer=Head;??????? /*Pointer指針設為首節點*/
          ??? while(Pointer!=NULL)??? /*當節點為NULL結束循環*/
          ??? {
          ??????? SearchTime++;
          ??????? if(Pointer->Number==Key)
          ??????? {
          ??????????? printf("Data Number: %d\n",Pointer->Number);
          ??????????? printf("Data Total: %d\n",Pointer->Total);
          ??????????? return 1;
          ??????? }
          ??????? Pointer=Pointer->Next;????? /*指向下一個節點*/
          ??? }
          ??? return 0;
          }
          /*釋放鏈表*/
          void Free_List(Link Head)
          {
          ??? Link Pointer;??????? /*節點聲明*/
          ??? while(Head!=NULL)??? /*當節點為NULL結束循環*/
          ??? {
          ??????? Pointer=Head;
          ??????? Head=Head->Next;??? /*指向下一個節點*/
          ??????? free(Pointer);
          ??? }
          }
          /*建立鏈表*/
          Link Create_List(Link Head)
          {
          ??? Link New;??????? /*節點聲明*/
          ??? Link Pointer;??? /*節點聲明*/
          ??? int i;
          ??? Head=(Link)malloc(sizeof(Node));??? /*分配內存*/
          ??? if(Head==NULL)
          ??????? printf("Memory allocate Failure!\n");??? /*內存分配失敗*/
          ??? else
          ????{
          ??????? Head->Number=Data[0][0];??????? /*定義首節點數據編號*/
          ??????? Head->Total=Data[1][0];
          ??????? Head->Next=NULL;
          ??????? Pointer=Head;??????????? /*Pointer指針設為首節點*/
          ??????? for(i=1;i<Max;i++)
          ??????? {
          ??????????? New=(Link)malloc(sizeof(Node));??? /*分配內存*/
          ??????????? New->Number=Data[0][i];
          ??????????? New->Total=Data[1][i];
          ??????????? New->Next=NULL;
          ??????????? Pointer->Next=New;??????? /*將新節點串連在原列表尾端*/
          ??????????? Pointer=New;????????????? /*列表尾端節點為新節點*/
          ??????? }
          ??? }
          ??? return Head;
          }
          /*主程序*/
          void main()
          {
          ??? Link Head=NULL;??????? /*節點聲明*/
          ??? int Num;????????? /*欲查找數據編號*/
          ??? Head=Create_List(Head);??? /*建立鏈表*/
          ??? if(Head!=NULL)
          ??? {
          ??????? printf("Please input the data number:");
          ??????? scanf("%d",&Num);
          ??????? if(List_Search(Num,Head))
          ??????????? printf("Search Time=%d\n",SearchTime);
          ??????? else
          ??????????? printf("Not Found!\n");
          ??????? Free_List(Head);??????? /*釋放鏈表*/
          ??? }
          }
          *運行結果如下:

          posted on 2006-07-17 22:54 小力力力 閱讀(2345) 評論(0)  編輯  收藏 所屬分類: C/C++
          主站蜘蛛池模板: 武山县| 红安县| 肥乡县| 望江县| 北宁市| 韩城市| 万年县| 郁南县| 叶城县| 金秀| 蒙阴县| 高台县| 同江市| 青岛市| 永安市| 新昌县| 呼和浩特市| 马山县| 利津县| 东山县| 茌平县| 新昌县| 莫力| 南溪县| 蚌埠市| 阿拉尔市| 永仁县| 包头市| 祥云县| 安丘市| 博乐市| 安福县| 准格尔旗| 苍溪县| 南靖县| 原阳县| 绥阳县| 镇雄县| 本溪| 墨玉县| 江华|