隨筆-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++
          主站蜘蛛池模板: 常熟市| 青铜峡市| 莱州市| 双桥区| 延安市| 穆棱市| 柳江县| 兴宁市| 新竹县| 阿克陶县| 大新县| 正蓝旗| 德格县| 句容市| 西平县| 仪征市| 莱芜市| 静宁县| 榆树市| 津市市| 沙坪坝区| 湘阴县| 尼玛县| 灵台县| 杂多县| 延寿县| 陈巴尔虎旗| 略阳县| 东丰县| 高雄市| 乌拉特前旗| 攀枝花市| 曲麻莱县| 资溪县| 禄劝| 饶阳县| 吉水县| 桂阳县| 二连浩特市| 清新县| 浙江省|