资源描述:
《单链表结点(多成员)的插入、查找与删除》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/*程序功能:用尾插法创建一个简单的链表,1.将链表中的数据输出到显示器上.2.查找结点3.插入结点.4.删除结点*/#include#include#includestructLNode/*定义链表结构(也可叫结点结构体)*/{charname[10];intclas;intdata;/*结点成员:数据域data*/structLNode*next;/*结点成员:指针域,指针域存放下一个结点的存储位置(即指针),*/};/*注意分号结束.不加分号,将提示"定义中有太多的类型"错误提示*//*总结:结点总是由两部分组成
2、:一个数据域,一个指针域.数据域可能有多个成员*/structLNode*h;/*头指针h----特别提示:定义在函数体外,以便下面的函数都能使用,请死死"抓住"头指针*//*下面各函数体内定义的变量(虽然同名)只在各自的函数体内有效,这点早有讲述,不再重复*//*下面定义create函数,该函数功能是建立链表.该函数必须定义为指针函数,因为其返回值必须为指针值,指针指向的是structLNode数据类型.---实际上是返回链表的头结点指针*/structLNode*create(intn){structLNode*p,*t;/*动态数据结点p(用于申请内存空间),尾结点t(
3、用于保存申请的空间).*/inti;/*循环变量*/h=NULL;/*头指针赋空值*/for(i=n;i>0;--i){p=(structLNode*)malloc(sizeof(structLNode));/*分配内存空间,建立节点*/printf("Inputname,classandscore:");scanf("%s%d%d",p->name,&p->clas,&p->data);if(h==NULL)/*如果头指针值为空值*/{h=p;/*把新建节点的存储地址放到头指针中."*/t=p;/*把新建节点给t节点,这样,头指针便指向了t结点*/}else/*否则(即头指
4、针值不为空)*/{t->next=p;/*把新建节点的存储地址给结点t的指针域.从第2次开始,新节点存储地址都传递给前一节点的指针域*/t=p;/*新节点给t节点,这样,上一节点的指针域便指向了新节点*/}}t->next=NULL;/*循环完毕,必须给最后一个节点指针域赋空值*/returnh;/*返回头指针,头指针此时的值已不为空*/}/*-------结点查询函数的实现----------*/structLNode*search(structLNode*h,charxm[10])/*结点查找函数:在以h为头结点的链表中查找分数为score的结点信息*/{structLN
5、ode*p;p=h;/*为不改变h的值,用p来替.两句可合并为一句:structLNode*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("Cannotfindyouneed!");elseprintf("youfindtheinformationis:---
6、>");printf("Name:%sClas:%dScore:%d",p->name,p->clas,p->data);putchar('');returnp;/*找到了要查找的结点,返回其地址*/}/*----插入一个结点的实现------*/intinsert(structLNode*h,inti)/*结点插入函数:在以h为头结点的链表中,在第i处插一个结点*/{intj;structLNode*p,*t;p=(structLNode*)malloc(sizeof(structLNode));/*创建一个新结点*/printf("Inputname,classand
7、score:");scanf("%s%d%d",p->name,&p->clas,&p->data);/*给新结点输入数据*/if(i<1)return0;/*如果实参过来的值小于1,则插入失败,返回0*/t=h;j=1;/*为不改变h的值,用t来代替.用t结点代替头结点开始,j=1,表示第1个结点*/while(t!=NULL&&jnext;j++;}/*指向下一个结点.j自增1.比如:i=5,则j++只到到