链表的c语言实现(四)

链表的c语言实现(四),第1张

链表的c语言实现(四),第2张

2.Insert (post-insert)
假设单个链表中有两个连续的节点P和Q(其中P是Q的直接前身)。如果我们需要在P和Q之间插入一个新的节点S,那么首先要把空赋值给S,然后让P的链域存储S的地址,S的链域存储Q的地址,(P-> link = S;S->link=q),从而完成插入操作。
下面的例子是应用插值算法的例子:
# include
# include
# define n10

typedef结构节点
{
char name[20];
struct node * 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 {
if((s =(stud *)malloc(sizeof(stud)))= = null)
{
printf("无法分配内存空!");
退出(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) /* search函数*/
{
stud * p;
char * y;
p = h-> link;
while(p!= NULL)
{
y = p-> name;
if(strcmp(y,x)= = 0)
return(p);
else p = p-> link;
}
if(p = = null)
printf("找不到数据!");
}

Void insert(stud *p) /* insert函数,在指针p后插入*/
{
char stuname[20];
stud * s;/*指针s是*/
if((s =(stud *)malloc(sizeof(stud)))= = null)
{
printf(" memory空无法分配!");
退出(0);
}
printf("请输入您要插入的人的姓名:");
scanf("%s ",stuname);
strcpy(s->name,stuname);/*将指针stuname指向的数组元素复制到新节点的数据字段*/
s-> link = p-> link;/*将新节点的链域指向原P节点的后继节点*/
P-> link = s;/* p节点的链域指向新节点*/
}

main()
{
int number;
char full name[20];/*保存输入的要查找的人的姓名*/
stud *head,* searchpoint
number = N;
head = creat(number);/*创建一个新的链表并返回头指针*/
printf("请输入要查找的人的名字:");
scanf("%s ",全名);
searchpoint=search(head,full name);/*查找并返回找到的节点指针*/
insert(search point);/*调用插入函数*/
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 链表的c语言实现(四)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情