明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

鏈表的C語(yǔ)言完成之單鏈表的搜索運(yùn)算

[摘要]建立了一個(gè)單鏈表之后,如果要進(jìn)行一些如插入、刪除等操作該怎么辦?所以還須掌握一些單鏈表的基本算法,來(lái)實(shí)現(xiàn)這些操作。單鏈表的基本運(yùn)算包括:查找、插入和刪除。下面我們就一一介紹這三種基本運(yùn)算的算法,并結(jié)合我們建立單鏈表的例子寫(xiě)出相應(yīng)的程序! 1、查找  對(duì)單鏈表進(jìn)行查找的思路為:對(duì)單鏈表的結(jié)點(diǎn)依次掃...
建立了一個(gè)單鏈表之后,如果要進(jìn)行一些如插入、刪除等操作該怎么辦?所以還須掌握一些單鏈表的基本算法,來(lái)實(shí)現(xiàn)這些操作。單鏈表的基本運(yùn)算包括:查找、插入和刪除。下面我們就一一介紹這三種基本運(yùn)算的算法,并結(jié)合我們建立單鏈表的例子寫(xiě)出相應(yīng)的程序。

  1、查找

  對(duì)單鏈表進(jìn)行查找的思路為:對(duì)單鏈表的結(jié)點(diǎn)依次掃描,檢測(cè)其數(shù)據(jù)域是否是我們所要查好的值,若是返回該結(jié)點(diǎn)的指針,否則返回NULL。

  因?yàn)樵趩捂湵淼逆溣蛑邪撕罄^結(jié)點(diǎn)的存儲(chǔ)地址,所以當(dāng)我們實(shí)現(xiàn)的時(shí)候,只要知道該單鏈表的頭指針,即可依次對(duì)每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域進(jìn)行檢測(cè)。

  以下是應(yīng)用查找算法的一個(gè)例子:

#include <stdio.h>
#include <malloc.h>
#include <string.h> /*包含一些字符串處理函數(shù)的頭文件*/
#define N 10
typedef struct node
{
 char name[20];
 struct node *link;
}stud;

stud * creat(int n) /*建立鏈表的函數(shù)*/
{
 stud *p,*h,*s;
 int i;
 if((h=(stud *)malloc(sizeof(stud)))==NULL)
 {
  printf("不能分配內(nèi)存空間!");
  exit(0);
 }
 h->name[0]='\0';
 h->link=NULL;
 p=h;
 for(i=0;i<n;i++)
 {
  if((s= (stud *) malloc(sizeof(stud)))==NULL)
  {
   printf("不能分配內(nèi)存空間!");
   exit(0);
  }
  p->link=s;
  printf("請(qǐng)輸入第%d個(gè)人的姓名",i+1);
  scanf("%s",s->name);
  s->link=NULL;
  p=s;
 }
 return(h);
}

stud * search(stud *h,char *x) /*查找鏈表的函數(shù),其中h指針是鏈表的表頭指針,x指針是要查找的人的姓名*/
{
 stud *p; /*當(dāng)前指針,指向要與所查找的姓名比較的結(jié)點(diǎn)*/
 char *y; /*保存結(jié)點(diǎn)數(shù)據(jù)域內(nèi)姓名的指針*/
 p=h->link;
 while(p!=NULL)
 {
  y=p->name;
  if(strcmp(y,x)==0) /*把數(shù)據(jù)域里的姓名與所要查找的姓名比較,若相同則返回0,即條件成立*/
   return(p); /*返回與所要查找結(jié)點(diǎn)的地址*/
  else p=p->link;
 }
 if(p==NULL)
  printf("沒(méi)有查找到該數(shù)據(jù)!");
}

main()
{
 int number;
 char fullname[20];
 stud *head,*searchpoint; /*head是表頭指針,searchpoint是保存符合條件的結(jié)點(diǎn)地址的指針*/
 number=N;
 head=creat(number);
 printf("請(qǐng)輸入你要查找的人的姓名:");
 scanf("%s",fullname);
 searchpoint=search(head,fullname); /*調(diào)用查找函數(shù),并把結(jié)果賦給searchpoint指針*/
}