隨筆-144  評(píng)論-80  文章-1  trackbacks-0
          2.設(shè)計(jì)一個(gè)查找鏈表中的數(shù)據(jù)的程序
          解:
          ????單鏈表中的數(shù)據(jù)查找,只能采用線性查找法往下一個(gè)節(jié)點(diǎn)查找。采用線性查找法查找鏈表中的數(shù)據(jù)時(shí)與數(shù)組不同的是,原來(lái)數(shù)組是用遞增數(shù)組索引來(lái)查找數(shù)據(jù),在鏈表中是往下一個(gè)節(jié)點(diǎn)查找。
          程序代碼如下:
          #include<stdio.h>
          #include<stdlib.h>
          #define Max 10
          struct List????????/*結(jié)節(jié)點(diǎn)結(jié)構(gòu)聲明*/???
          {
          ??? int Number;
          ??? int Total;
          ??? struct List *Next;
          };
          typedef struct List Node;
          typedef Node *Link;
          int Data[2][Max]=????????????? /*初始化數(shù)據(jù)*/
          ??????? {3,9,25,5,7,26,65,80,2,6,1050,3850,1000,5670,2250,9650,2380,
          ??????????? 1700,3000,2000};
          int SearchTime=0;??????? /*查找次數(shù)*/
          /*鏈表查找*/
          int List_Search(int Key,Link Head)
          {
          ??? Link Pointer;
          ??? Pointer=Head;??????? /*Pointer指針設(shè)為首節(jié)點(diǎn)*/
          ??? while(Pointer!=NULL)??? /*當(dāng)節(jié)點(diǎn)為NULL結(jié)束循環(huán)*/
          ??? {
          ??????? SearchTime++;
          ??????? if(Pointer->Number==Key)
          ??????? {
          ??????????? printf("Data Number: %d\n",Pointer->Number);
          ??????????? printf("Data Total: %d\n",Pointer->Total);
          ??????????? return 1;
          ??????? }
          ??????? Pointer=Pointer->Next;????? /*指向下一個(gè)節(jié)點(diǎn)*/
          ??? }
          ??? return 0;
          }
          /*釋放鏈表*/
          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);
          ??? }
          }
          /*建立鏈表*/
          Link Create_List(Link Head)
          {
          ??? 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
          ????{
          ??????? Head->Number=Data[0][0];??????? /*定義首節(jié)點(diǎn)數(shù)據(jù)編號(hào)*/
          ??????? Head->Total=Data[1][0];
          ??????? Head->Next=NULL;
          ??????? Pointer=Head;??????????? /*Pointer指針設(shè)為首節(jié)點(diǎn)*/
          ??????? for(i=1;i<Max;i++)
          ??????? {
          ??????????? New=(Link)malloc(sizeof(Node));??? /*分配內(nèi)存*/
          ??????????? New->Number=Data[0][i];
          ??????????? New->Total=Data[1][i];
          ??????????? New->Next=NULL;
          ??????????? Pointer->Next=New;??????? /*將新節(jié)點(diǎn)串連在原列表尾端*/
          ??????????? Pointer=New;????????????? /*列表尾端節(jié)點(diǎn)為新節(jié)點(diǎn)*/
          ??????? }
          ??? }
          ??? return Head;
          }
          /*主程序*/
          void main()
          {
          ??? Link Head=NULL;??????? /*節(jié)點(diǎn)聲明*/
          ??? int Num;????????? /*欲查找數(shù)據(jù)編號(hào)*/
          ??? 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);??????? /*釋放鏈表*/
          ??? }
          }
          *運(yùn)行結(jié)果如下:

          posted on 2006-07-17 22:54 小力力力 閱讀(2351) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): C/C++
          主站蜘蛛池模板: 镇坪县| 德保县| 且末县| 涞源县| 武平县| 邛崃市| 涞水县| 铅山县| 阿瓦提县| 黄石市| 区。| 通州区| 常州市| 沂源县| 恩施市| 南川市| 得荣县| 信丰县| 镶黄旗| 尚义县| 米脂县| 乐昌市| 建湖县| 镇远县| 岑巩县| 阿鲁科尔沁旗| 龙井市| 静安区| 贵州省| 南康市| 姚安县| 三门峡市| 西和县| 太康县| 浪卡子县| 乌苏市| 家居| 武宁县| 临武县| 旺苍县| 玛纳斯县|