链表的c语言实现(四)
时间:2004-11-20 6:22:17 繁體中文 QQ群:45766462、286302142、插入(后插)
假设在一个单链表中存在2个连续结点p、q(其中p为q的直接前驱),若我们需要在p、q之间插入一个新结点s,那么我们必须先为s分配空间并赋值,然后使p的链域存储s的地址,s的链域存储q的地址即可。(p->link=s;s->link=q),这样就完成了插入操作。
下例是应用插入算法的一个例子:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 10
typedef struct node
{
char name[20];
struct node *link;
}stud;
stud * creat(int n) /*建立单链表的函数*/
{
stud *p,*h,*s;
int i;
if((h=(stud *)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
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("不能分配内存空间!");
exit(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) /*查找函数*/
{
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) /*插入函数,在指针p后插入*/
{
char stuname[20];
stud *s; /*指针s是保存新结点地址的*/
if((s= (stud *) malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
printf("请输入你要插入的人的姓名:");
scanf("%s",stuname);
strcpy(s->name,stuname); /*把指针stuname所指向的数组元素拷贝给新结点的数据域*/
s->link=p->link; /*把新结点的链域指向原来p结点的后继结点*/
p->link=s; /*p结点的链域指向新结点*/
}
main()
{
int number;
char fullname[20]; /*保存输入的要查找的人的姓名*/
stud *head,*searchpoint;
number=N;
head=creat(number); /*建立新链表并返回表头指针*/
printf("请输入你要查找的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname); /*查找并返回查找到的结点指针*/
insert(searchpoint); /*调用插入函数*/
}
 
链表的c语言实现(一)
单链表的c语言实现(1)
链表的c语言实现(三)
链表的c语言实现(五)
链表的c语言实现(六)
链表的c语言实现(七)
链表的c语言实现(八)
链表的c语言实现(九)
链表的c语言实现(十)
更多内容请看 编程语言教程 > > c语言教程专题
| · | 程序人生 一些编程初学者的良言警句 | 03-19 |
| · | 关于网络编程的,cmsghdr的意思? | 01-31 |
| · | VB实现逻辑盘隐藏分区 | 01-30 |
| · | 用vbs来写sql注入等80端口的攻击脚本 | 01-30 |
| · | 代码自我清除,自我加密,解密的实现 | 01-29 |
| · | 谈谈VB程序的破解(5千字) | 01-29 |
| · | Java编程基础 | 09-29 |
| · | JAVA教程 第一讲 Java语言概述 | 09-29 |
| · | JAVA教程 第二讲 Java语言基础知识 | 09-29 |
| · | JAVA教程 第三讲 Java语言中的面向对象特性 | 09-29 |
| · | JAVA教程 第四讲 Java的例外处理和I/O流 | 10-02 |
| · | JAVA教程 第五讲 AWT图形用户界面设计 | 10-02 |
| · | JAVA教程 第六讲 Java的线程和Java Applet | 10-02 |
| · | JAVA教程 第七讲 Swing用户界面设计 | 10-02 |
| · | JAVA教程 第八讲 Java网络编程 | 10-12 |
| · | Java新手入门的30个基本概念 | 11-16 |