资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,十二饼链表插入结点,链表插入结点,原则:,1、插入操作不应破坏原链接关系,2、插入的结点应该在它该在的位置。应该,有一个插入位置的查找子过程。,先看下面一个简单的例子:已有一个如图所示的链表,它是按结点中的整数域从小到大排序的。现在要插,入一个结点,该节点中的数为10。,15,null,head,10,此结点已插入链表,参考程序,结构7c,#include ,预编译命令,include ,内存空间分配,#define null o,定义空指针常量,# define len sizeof( struct nusT)定义常量,表示结构长度,struct nusT,结构声明,nt num:,整型数,struct nusT非next, nusT结构指针,被调用函数 inserto,两个形参分别表示链表和待插入的结点,void insert(struct numSTsphead, struct numST p),函数体开始,struct numST-q, r:,定义结构指针q,r,if(head)=null),第一种情况,链表为空,ahead= p;,链表头指向p,return;,完成插入操作,返回,else,链表不为空,第二种情况,p结点num值小于链表头结点的num值,if( head)-nump-num,将p结点插到链表头部,p-next=举 head;/将p的next指针指向链表头( head),plead p;,将链表头赋值为p,return,/返回,第三种情况,循环查找正确位置,r=head;,r赋值为链表头,q=(* head)-next;/q赋值为链表的下一个结点,while(q!=nul)利用循环查找正确位置,判断当前结点mum是否小于p结点的num,if(q-num p-num),r=q;r赋值为q,即指向q所指的结点,q=q-next;/q指向链表中相邻的下一个结点,else,找到了正确的位置,break;退出循环,将p结点插入正确的位置,r-next= p;,p-next= q:,被调用函数,形参为ST结构指针,用于输出链表内容,void print(struct numST shead),nt k=0:,整型变量,用于计数,struct numSTa:,声明r为ST结构指针,r=head,r赋值为head,即指向链表头,whiler != null),当型循环,链表指针不为空则继续,循环体开始,k=k+1,计数加1,printf( %od %odin k, r-num);,r=r-next,取链表中相邻的下一个结点,循环体结束,void maino,主函数开始,函数体开始,struct nusT*head,*p;/ST型结构指针,head= null,初始化head为null,分配3个ST结构的内存空间,用于构造链表,head =(struct numSTs)malloc(LEN),head-next=(struct numSTs)mallOc(LEN),head-next-next=(struct numSTs) mallOc(LEN,为链表中的3个结点中的num赋值为5、10和15,head-num= 5;,head-next-num= 10,head-next-next-num=,head-nextnext-next=nul,链表尾赋值为空,构造一个结点p,用于插入链表,p=(struct nusT)malloc(LEN);,p-num= 12,next= null,insert(,调用 insert函数将结点p插入链表,print(head);,调用 print函数,输出链表内容,主函数结束,先看主函数,、定义两个ST型结构指针*head,*p,并让head=nul,2、分配3个ST结构的内存空间,用于构造链表,1) head=(struct numST*)mallOc(LEN),(2) head-next=(struct numST=) malloc(LEN);,(3) head-next-next=(struct numST=)mallOc(LEN),head-next,head-next-next,这3个ST结构的内存空间如上图所示,下面用赋值语句往这3个空间中放mum数据。最后的,个结点为队尾,在其指针域存放mul,(4) head-num=5;,(5) head-next-num=10,(6 head-next-next-num=15,(7) head-next-next-next=null,做了这4条之后形成了一条链表如下,head,10,nu,该链表的头结点由head所指向。,
展开阅读全文