单链表结点(多成员)的插入、查找与删除

上传人:第*** 文档编号:34263323 上传时间:2018-02-22 格式:DOC 页数:4 大小:41.50KB
返回 下载 相关 举报
单链表结点(多成员)的插入、查找与删除_第1页
第1页 / 共4页
单链表结点(多成员)的插入、查找与删除_第2页
第2页 / 共4页
单链表结点(多成员)的插入、查找与删除_第3页
第3页 / 共4页
单链表结点(多成员)的插入、查找与删除_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《单链表结点(多成员)的插入、查找与删除》由会员分享,可在线阅读,更多相关《单链表结点(多成员)的插入、查找与删除(4页珍藏版)》请在金锄头文库上搜索。

1、/*程序功能:用尾插法创建一个简单的链表,1.将链表中的数据输出到显示器上 .2.查找结点3.插入结点.4.删除结点 */#include #include #include struct LNode /*定义链表结构 (也可叫结点结构体)*/ char name10;int clas;int data; /*结点成员: 数据域 data*/struct LNode *next; /*结点成员: 指针域,指针域存放下一个结点的存储位置(即指针),*/; /*注意分号结束.不加分号,将提示 定义中有太多的类型错误提示*/*总结:结点总是由两部分组成:一个数据域,一个指针域.数据域可能有多个成员*

2、/struct LNode *h; /*头指针 h -特别提示:定义在函数体外,以便下面的函数都能使用,请死死抓住头指针*/*下面各函数体内定义的变量 (虽然同名)只在各自的函数体内有效,这点早有讲述,不再重复*/*下面定义 create 函数,该函数功能是建立链表.该函数必须定义为指针函数,因为其返回值必须为指针值,指针指向的是 struct LNode 数据类型.-实际上是返回链表的头结点指针*/struct LNode *create(int n) struct LNode *p,*t; /*动态数据结点 p(用于申请内存空间),尾结点 t(用于保存申请的空间).*/int i; /*循

3、环变量*/h=NULL; /*头指针赋空值*/for(i=n;i0;-i) p=(struct LNode *)malloc(sizeof(struct LNode); /*分配内存空间,建立节点*/printf(Input name,class and score:);scanf(%s%d%d,p-name,if(h=NULL) /*如果头指针值为空值*/h=p; /*把新建节点的存储地址放到头指针中.*/t=p; /*把新建节点给 t 节点,这样,头指针便指向了 t 结点*/else /* 否则( 即头指针值不为空)*/t-next=p; /*把新建节点的存储地址给结点 t 的指针域.从第

4、 2 次开始,新节点存储地址都传递给前一节点的指针域*/t=p; /*新节点给 t 节点,这样,上一节点的指针域便指向了新节点*/t-next=NULL; /*循环完毕,必须给最后一个节点指针域赋空值*/ return h; /*返回头指针,头指针此时的值已不为空*/*-结点查询函数的实现-*/struct LNode *search(struct LNode *h,char xm10) /*结点查找函数:在以 h 为头结点的链表中查找分数为 score 的结点信息 */ struct LNode *p;p=h; /*为不改变 h 的值,用 p 来替.两句可合并为一句:struct LNode

5、 *p=h;因为经过 create 函数,h 已返回头结点,且值已不再为空,并指向首结点. 如果 h 为 NULL 的话,则应改为:p=h-next.即从首结点开始,这点一定要切记 */while(p!=NULL&strcmp(p-name,xm)!=0)p=p-next; /*指向下一结点.该循环体只有这一句*/if(strcmp(p-name,xm)!=0)printf(Can not find you need!n);elseprintf(you find the information is:-);printf(Name:%s Clas:%d Score:%d ,p-name,p-cl

6、as,p-data);putchar(n);return p; /*找到了要查找的结点,返回其地址*/*-插入一个结点的实现-*/int insert(struct LNode *h,int i) /*结点插入函数:在以 h 为头结点的链表中,在第 i 处插一个结点*/int j; struct LNode *p,*t;p=(struct LNode *)malloc(sizeof(struct LNode); /*创建一个新结点 */printf(Input name,class and score:);scanf(%s%d%d,p-name, /*给新结点输入数据 */if(inext;

7、j+; /*指向下一个结点.j 自增 1.比如:i=5,则 j+只到到 4,一旦不符合jnext=t-next; /*这两句关键语句 :顺序不能颠倒*/t-next=p;printf(The new order is:n);t=h; /*要输出新链表,必须又从头结点开始.为不改变 h 的值,再次用 t 来代替开始*/while(t) printf(Name:%s Clas:%d Score:%d ,t-name,t-clas,t-data);putchar(n);t=t-next;return 1;/*-删除一个结点的实现-*/int delnode(struct LNode *h,int i

8、)struct delnode *p,*t;int j;if(inext;j+;if(t=NULL)return 0; /*没有第 i-1 个结点,返回 0*/p=t-next; /*p 指向第 i 个结点*/if(p=NULL)return 0; /*没有第 i 个结点时,返回 0*/t-next=p-next; /*删除第 i 个结点*/printf(nThe new order is:n);t=h; /*要输出新链表,必须又从头结点开始.为不改变 h 的值,再次用 t 来代替开始*/while(t) printf(you find the information is:Name:%s C

9、las:%d Score:%d ,t-name,t-clas,t-data);putchar(n);t=t-next;free(p);return 1; /*成功删除返回 1*/*-在 main()函数中用复合语句的形式调用各函数-*/void main()/*-调用 create()函数-*/int n;struct LNode *q; /*定义一个链表指针,用于接受函数返回来的值*/printf(Input you want to create point:); /*输入你想创建的节点数*/scanf(%d, /*调用 create()函数,上面函数返回的是头指针值*/printf(The

10、 result is:n);while(q) /*如果指针值不为空*/printf(Name:%s Clas:%d Score:%d ,q-name,q-clas,q-data);putchar(n);q=q-next; /*指针位移指向下一节点*/ /*直至指针域值为空,循环中止*/printf(n);/*-调用 search()函数-*/char xm10;printf(nInput you want to find name:);scanf(%s,xm);search(h,xm);/*头指针定为了全局变量 ,即可直接调用 */*-调用 insert()函数-*/int i,c;print

11、f(Input you want to insert place:);scanf(%d,c=insert(h,i);if(c=1)printf( return %d-Insert succesful!n,c);elseprintf( return %d-Insert fail!n,c);/*-调用 delnode()函数-*/int i,c;printf(nInput you want to delete jd:);scanf(%d,c=delnode(h,i);if(c=1)printf( return %d-Delete succesful!n,c);elseprintf( return %d-Delete fail!n,c);getch();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号