顺序表的存储结构(顺序表)
大家好,乐乐来为大家解答以下的问题,关于顺序表的存储结构,顺序表这个很多人还不知道,那么今天让乐乐带着大家一起来看看吧!
你看看吧,我不知道你想问什么,代码后面都有解释的,挑点看就行。
[例7.12]写一个函数,删除链表中的指定结点。
删除一个结点有两种情况:1. 被删除结点是第一个结点。
这种情况只需使head指向第二个结点即可。
即head=pb->next。
其过程如图7.5所示。
2. 被删结点不是第一个结点,这种情况使被删结点的前一结点指向被删结点的后一结点即可。
即pf->next=pb->next。
其过程如图7.6所示。
函数编程如下:TYPE * delete(TYPE * head,int num){TYPE *pf,*pb;if(head==NULL) /*如为空表, 输出提示信息*/{ printf("empty list!");goto end;}pb=head;while (pb->num!=num && pb->next!=NULL)/*当不是要删除的结点,而且也不是最后一个结点时,继续循环*/{pf=pb;pb=pb->next;}/*pf指向当前结点,pb指向下一结点*/if(pb->num==num){if(pb==head) head=pb->next;/*如找到被删结点,且为第一结点,则使head指向第二个结点,否则使pf所指结点的指针指向下一结点*/else pf->next=pb->next;free(pb);printf("The node is deleted");}elseprintf("The node not been foud!");end:return head;} 函数有两个形参,head为指向链表第一结点的指针变量,num删结点的学号。
首先判断链表是否为空,为空则不可能有被删结点。
若不为空,则使pb指针指向链表的第一个结点。
进入while语句后逐个查找被删结点。
找到被删结点之后再看是否为第一结点,若是则使head指向第二结点(即把第一结点从链中删去),否则使被删结点的前一结点(pf所指)指向被删结点的后一结点(被删结点的指针域所指)。
如若循环结束未找到要删的结点, 则输出“末找到”的提示信息。
最后返回head值。
[例7.13]写一个函数,在链表中指定位置插入一个结点。
在一个链表的指定位置插入结点, 要求链表本身必须是已按某种规律排好序的。
例如,在学生数据链表中, 要求学号顺序插入一个结点。
设被插结点的指针为pi。
可在三种不同情况下插入。
1. 原表是空表,只需使head指向被插结点即可。
见图7.7(a)2. 被插结点值最小,应插入第一结点之前。
这种情况下使head指向被插结点,被插结点的指针域指向原来的第一结点则可。
即:pi->next=pb;head=pi; 见图7.7(b)3. 在其它位置插入,见图7.7(c)。
这种情况下,使插入位置的前一结点的指针域指向被插结点,使被插结点的指针域指向插入位置的后一结点。
即为:pi->next=pb;pf->next=pi;4. 在表末插入,见图7.7(d)。
这种情况下使原表末结点指针域指向被插结点,被插结点指针域置为NULL。
即:pb->next=pi;pi->next=NULL; TYPE * insert(TYPE * head,TYPE *pi){TYPE *pf,*pb;pb=head;if(head==NULL) /*空表插入*/(head=pi;pi->next=NULL;}else{while((pi->num>pb->num)&&(pb->next!=NULL)){pf=pb;pb=pb->next; }/*找插入位置*/if(pi->num<=pb->num){if(head==pb)head=pi;/*在第一结点之前插入*/else pf->next=pi;/*在其它位置插入*/pi->next=pb; }else{pb->next=pi;pi->next=NULL;} /*在表末插入*/}return head;} 本函数有两个形参均为指针变量,head指向链表,pi 指向被插结点。
函数中首先判断链表是否为空,为空则使head指向被插结点。
表若不空,则用while语句循环查找插入位置。
找到之后再判断是否在第一结点之前插入,若是则使head 指向被插结点被插结点指针域指向原第一结点,否则在其它位置插入, 若插入的结点大于表中所有结点,则在表末插入。
本函数返回一个指针, 是链表的头指针。
当插入的位置在第一个结点之前时, 插入的新结点成为链表的第一个结点,因此head的值也有了改变, 故需要把这个指针返回主调函数。
[例7.14]将以上建立链表,删除结点,插入结点的函数组织在一起,再建一个输出全部结点的函数,然后用main函数调用它们。
#define NULL 0#define TYPE struct stu#define LEN sizeof(struct stu)struct stu{int num;int age;struct stu *next;};TYPE * creat(int n){struct stu *head,*pf,*pb;int i;for(i=0;i
函数的形参head的初值指向链表第一个结点。
在while语句中,输出结点值后,head值被改变,指向下一结点。
若保留头指针head, 则应另设一个指针变量,把head值赋予它,再用它来替代head。
在main函数中,n为建立结点的数目, num为待删结点的数据域值;head为指向链表的头指针,pnum为指向待插结点的指针。
main函数中各行的意义是:第六行输入所建链表的结点数;第七行调creat函数建立链表并把头指针返回给head;第八行调print函数输出链表;第十行输入待删结点的学号;第十一行调delete函数删除一个结点;第十二行调print函数输出链表;第十四行调malloc函数分配一个结点的内存空间, 并把其地址赋予pnum;第十五行输入待插入结点的数据域值;第十六行调insert函数插入pnum所指的结点;第十七行再次调print函数输出链表。
本文分享到此完毕,希望对您有所帮助。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
预约红旗试驾通常需要满足以下条件:首先,您需要年满18周岁并持有有效的中国驾驶证。这是最基本的条件,因为...浏览全文>>
-
MINI试驾:线上+线下操作指南MINI试驾体验是了解这款经典车型的最佳方式。无论是线上预约还是线下体验,都需提...浏览全文>>
-
想要体验理想L6的魅力?只需几个简单步骤即可轻松预约试驾!首先,打开理想汽车官网或下载官方App,注册并登录...浏览全文>>
-
睿蓝汽车,为您带来一场奢华与科技交织的试驾之旅。无论您是追求速度与激情的驾驶爱好者,还是注重舒适与品质...浏览全文>>
-
金龙汽车作为国内知名的客车品牌,其试驾体验备受关注。对于新手来说,预约试驾是一次了解车辆性能的好机会,...浏览全文>>
-
哈弗H6试驾操作指南哈弗H6作为一款国产SUV的代表车型,以其高性价比和出色性能深受消费者喜爱。如果您计划进行...浏览全文>>
-
预约睿蓝汽车试驾是体验新能源车型的好机会。以下是新手操作的详细步骤:第一步:访问官方网站或下载官方APP。...浏览全文>>
-
试驾吉利汽车的吉利熊猫是一个了解这款车型性能和功能的好机会。以下是预约试驾的基本流程:第一步:访问官网...浏览全文>>
-
试驾长安CS75是一次令人愉悦的体验。从咨询开始,我便感受到销售人员的专业与热情。他们详细解答了我的疑问,...浏览全文>>
-
长安凯程试驾预约,让您的驾驶体验更加便捷与愉悦。无论您是想感受新车型的强劲动力,还是希望深入了解车辆性...浏览全文>>
- 睿蓝汽车预约试驾,新手必知的详细步骤
- 小鹏G7试驾,新手必知的详细步骤
- 五菱星光试驾,开启完美驾驭之旅
- 伊兰特试驾,感受豪华与科技的完美融合
- 道郎格试驾,感受豪华与科技的完美融合
- 奇瑞新能源预约试驾,新手必知的详细步骤
- 万象汽车试驾,轻松开启试驾之旅
- 上汽大通MAXUS预约试驾操作指南
- 试驾红旗HS3 PHEV,新手必看的详细流程
- 特斯拉Model Y试驾预约,从预约到试驾的完美旅程
- 阜阳帕萨特多少钱 2025款落地价,各配置车型售价全解析
- 试驾雷克萨斯ES如何快速锁定试驾名额?
- 阜阳ID.4 CROZZ多少钱?选车指南与落地价全解析
- 君越试驾流程讲解
- 试驾世家,快速上手,开启豪华体验
- 莲花跑车试驾预约操作指南
- 东风风行试驾,如何快速预约并体验驾驶乐趣?
- 池州途观X新车报价2024款,最低售价25.08万起,购车攻略来了
- 安徽安庆途观L多少钱?购车攻略全解析
- 安庆ID.4 X新车报价2025款与配置的完美平衡