建立了一個單鏈表之后,如果要進(jìn)行一些如插入、刪除等操作該怎么辦?所以還須掌握一些單鏈表的基本算法,來實(shí)現(xiàn)這些操作。單鏈表的基本運(yùn)算包括:查找、插入和刪除。
下面我們就一一介紹這三種基本運(yùn)算的算法,并結(jié)合我們建立單鏈表的例子寫出相應(yīng)的程序。
1、查找
對單鏈表進(jìn)行查找的思路為:對單鏈表的結(jié)點(diǎn)依次掃描,檢測其數(shù)據(jù)域是否是我們所要查好的值,若是返回該結(jié)點(diǎn)的指針,否則返回NULL。
因?yàn)樵趩捂湵淼逆溣蛑邪撕罄^結(jié)點(diǎn)的存儲地址,所以當(dāng)我們實(shí)現(xiàn)的時候,只要知道該單鏈表的頭指針,即可依次對每個結(jié)點(diǎn)的數(shù)據(jù)域進(jìn)行檢測。
以下是應(yīng)用查找算法的一個例子:
#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("請輸入第%d個人的姓名",i+1);
scanf("%s",s->name);
s->link=NULL;
p=s;
}
return(h);
}