解题思路及学习收获

本文介绍了如何使用编程技巧实现二维数组的蛇形矩阵填充算法,以及在单链表中进行有序插入的操作。同时讨论了类设计中的派生类构造函数和数据安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1蛇形矩阵

题目:输入:n,m;(分别代表行,列)

          输出:按指定形式输出

我觉得这题关键的是,想到可以把这个二维数组的边界当作是“变化的”,比如最初一圈向右走,向下走,向左走,然后再向上走时,最后是不能走到第0行的(可以当作上边界+1),接着第二圈向右走时,最后不能走到第m-1列的(可以当作右边界-1)......

所以我们可以设些变量来接收这些“变化的”边界;即代码中的:int top=0,bottom=n-1,left=0,right=m-1;//分别代表上边界,下边界,左边界,右边界

然后用:int t,b,l,r; 这些变量分别代表向下走,向上走,向右走,向左走

接着便是循环:通过观察我们可以发现二维数组中的元素是从1逐个增加至n*m的,所以我们可以设一个变量k=1,同时来控制循环结束:即while(k<=n*m)

最后在循环体中,我们就可以通过控制“走的方向”来为二维数组中各个元素赋值。比如通过下面代码控制“向右走”:

while(l<=right){

a[top][l++]=k++;//赋值(在“上边界”时向右走)}

top++;//下一次转回来时须指向向内一圈

t=top;

......(向下走,向左走,向上走原理一样)

 T2有序单循环列表的插入

(因为之前没学过链表,就看看了看学长发的b站上关于单链表的视频,但是还没多做些题练习一下,所以实在看不出循环怎么弄,就先只写了有序单链表的插入><)

(然后,根据我目前刚学的单链表的相关知识~~)

我们首先要知道在单链表中,每个节点除了存放数据元素,还存储指向下一个节点的指针。

所以我们先写一个结构体:(刚发现怎么粘贴照片~!~)

里面包含数据域和指针域 ,并用构造函数初始化新创建的节点

 然后关键的部分就是怎样有序插入指定节点:即遍历链表,找到一个节点,其值小于我们要插入节点的值,并且下一个节点的值大于我们要插入节点的值

要注意插入新节点时,不能交换左图中最后两行代码,否则可能会导致节点丢失

 其中,如果链表为空链表或要插入的节点小于链表中第一个节点的数值时,我们可以直接把要插入的节点插在链表中的第一个节点,然后返回。代码如下:

 

 T3类设计题目

我觉得本题对初学者来说需要注意的点是:在派生类(即子类)的构造函数需要初始化基类(即父类)的部分时,派生类构造函数会对基类构造函数调用,以确保基类对象正确的初始化。即:

 (我就是没在子类的构造函数后面写Account(b),看了半天!!)

然后一般把属性设为私有,可以提高数据安全性;在基类中,可以把基类的属性设为保护权限,这样可以是派生类能够访问和修改这些属性。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值