链表的C语言实现之单链表的查找运算
建立单链表后,如果想做一些插入、删除等操作,应该怎么做?因此,需要掌握单链表的一些基本算法来实现这些操作。单链表的基本操作包括:查找、插入和删除。下面就逐一介绍这三种基本运算的算法,并以建立单链表为例编写相应的程序。
1.发现
搜索单链表的思路是:依次扫描单链表的节点,检查它的数据字段是否是我们要检查的值。如果是,返回节点的指针,否则返回NULL。
因为单链表的链域包含了后续节点的存储地址,所以我们在实现的时候,只要知道单链表的头指针,就可以依次检测出每个节点的数据域。
以下是应用搜索算法的示例:
# include < stdio . h >
# include < malloc . h >
# include < string . h >/*包含一些字符串处理函数的头文件*/
# define n10
typedef结构节点
结构节点* link
}梭哈;
Stud * creat(int n) /*构建链表的函数*/
{
stud *p,*h,* s;
int I;
if((h =(stud *)malloc(sizeof(stud)))= = null)
{
printf("无法分配内存空!");
退出(0);
}
h--> name[0]= ' \ 0 ';
h-> link = NULL;
p = h;
for(I = 0;I < n;++)
{
if((s =(stud *)malloc(sizeof(stud)))= = null)
{
printf(" memory空无法分配!");
退出(0);
}
p-> link = s;
printf("请输入%d人的姓名",I+1);
scanf("%s ",s-> name);
s-> link = NULL;
p = s;
}
return(h);
}
Stud * search(stud *h,char *x) /*函数查找链表,其中h指针是链表的头指针,x指针是要查找的人的名字*/
{
stud * p;/*当前指针,指向要与搜索名称进行比较的节点*/
char * y;/*保存节点数据字段中名称的指针*/
p = h-> link;
while(p!= NULL)
{
y = p-> name;
if(strcmp(y,x)==0) /*将数据字段中的名称与要查找的名称进行比较,如果相同,则返回0,即条件成立*/
return(p);/*返回要查找的节点的地址*/
else p = p-> link;
}
if(p = = null)
printf("找不到数据!");
}
main()
{
int number;
char full name[20];
stud *head,* searchpoint/*head是头指针,searchpoint是存放合格节点地址的指针*/
number = N;
head = creat(number);
printf("请输入您要找的人的名字:");
scanf("%s ",全名);
searchpoint=search(head,full name);/*调用查找函数并将结果赋给searchpoint指针*/
}
0条评论