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
小力力力 閱讀(2336)
評論(0) 編輯 收藏 所屬分類:
C/C++