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
小力力力 阅读(2329)
评论(0) 编辑 收藏 所属分类:
C/C++