电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

删除链表结点VIP免费

删除链表结点_第1页
1/18
删除链表结点_第2页
2/18
删除链表结点_第3页
3/18
§11.7用指针处理链表11.7.4建立动态链表所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系例11.5写一函数建立一个有3名学生数据的单向动态链表.算法如图图11-12图11-12§11.7用指针处理链表算法的实现:我们约定学号不会为零,如果输入的学号为0,则表示建立链表的过程完成,该结点不应连接到链表中。如果输入的p1->num不等于0,则输入的是第一个结点数据(n=1),令head=p1,即把p1的值赋给head,也就是使head也指向新开辟的结点p1所指向的新开辟的结点就成为链表中第一个结点图11-13图11-13§11.7用指针处理链表算法的实现:再开辟另一个结点并使p1指向它,接着输入该结点的数据.如果输入的p1->num≠0,则应链入第2个结点(n=2),将新结点的地址赋给第一个结点的next成员.接着使p2=p1,也就是使p2指向刚才建立的结点图11-14图11-14§11.7用指针处理链表算法的实现:再开辟一个结点并使p1指向它,并输入该结点的数据.在第三次循环中,由于n=3(n≠1),又将p1的值赋给p2->next,也就是将第3个结点连接到第2个结点之后,并使p2=p1,使p2指向最后一个结点.图11-15图11-15§11.7用指针处理链表算法的实现:再开辟一个新结点,并使p1指向它,输入该结点的数据。由于p1->num的值为0,不再执行循环,此新结点不应被连接到链表中.将NULL赋给p2->next.建立链表过程至此结束,p1最后所指的结点未链入链表中,第三个结点的next成员的值为NULL,它不指向任何结点。图11-16图11-16§11.7用指针处理链表建立链表的函数如下:#include#include#defineNULL0//令NULL代表0,用它表示“空地址#defineLENsizeof(structstudent)//令LEN代表struct//student类型数据的长度structstudent{longnum;floatscore;structstudent*next;};intn;//n为全局变量,本文件模块中各函数均可使用它§11.7用指针处理链表structstudent*creat(){structstudent*head;structstudent*p1,*p2;n=0;p1=p2=(structstudent*)malloc(LEN);scanf("%ld,%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n=n+1;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structstudent*)malloc(LEN);scanf("%ld,%f",&p1->num,&p1->score);}p2->next=NULL;/*将新节点的next指针赋值NULL,即作为表尾*/return(head);}P1=(structstudent*)malloc(sizeof(structstudent))§11.7用指针处理链表11.7.5输出链表首先要知道链表第一个结点的地址,也就是要知道head的值。然后设一个指针变量p,先指向第一个结点,输出p所指的结点,然后使p后移一个结点,再输出,直到链表的尾结点。图11-17,11-18图11-17,11-18§11.7用指针处理链表例11.9编写一个输出链表的函数print.voidprint(structstudent*head){structstudent*p;printf("\nNow,These%drecordsare:\n",n);p=head;if(head!=NULL)do{printf("%ld%5.1f\n",p->num,p->score);p=p->next;}while(p!=NULL);}§11.7用指针处理链表11.7.6对链表的删除操作从一个动态链表中删去一个结点,并不是真正从内存中把它抹掉,而是把它从链表中分离开来,只要撤销原来的链接关系即可。图11-19图11-19§11.7用指针处理链表例11.10写一函数以删除动态链表中指定的结点.解题思路:从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。§11.7用指针处理链表可以设两个指针变量p1和p2,先使p1指向第一个结点.如果要删除的不是第一个结点,则使p1后移指向下一个结点(将p1->next赋给p1),在此之前应将p1的值赋给p2,使p2指向刚才检查过的那个结点§11.7用指针处理链表注意:①要删的是第一个结点(p1的值等于head的值,如图11-20(a)那样),则应将p1->next赋给head。这时head指向原来的第二个结点。第一个结点虽然仍存在,但它已与链表脱离,因为链表中没有一个结点或头指针指向它。虽然p1还指向它,它仍指向第二个结点,但仍无...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

删除链表结点

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部