老觉得自己的代码写的很臃肿,怎么办

时间:2023-01-02 22:31:34
最近我在自学数据结构,书上有些习题,我差不多都用IDE自己写一遍了

但是有些本来觉得应该很简单的代码,写了差不多两三百行

if (ps->elements->left == pbnext)//首先先把中节点的左节点搬到左节点的中节点,其他作调整
{
ptmp1 = ps->elements->middle->left; ptmp2 = ps->elements->middle->middle; ptmp3 = ps->elements->middle->right;
ps->elements->left->middle = ptmp1;
ps->elements->middle->left = ptmp2; ps->elements->middle->middle = ptmp3; ps->elements->middle->right = NULL;
ps->elements->left->sign1 = Find_MaxDepth_Leaves(ps->elements->left->middle);//重新定义标志

if (ps->elements->middle->middle == NULL)//如果现在中节点的中节点变成了NULL,那说明调整过度
{
if (ps->elements->right != NULL)//说明还可以从右边进行调整
{
ptmp1 = ps->elements->right->left; ptmp2 = ps->elements->right->middle; ptmp3 = ps->elements->right->right;
ps->elements->middle->middle = ptmp1;
ps->elements->right->left = ptmp2; ps->elements->right->middle = ptmp3; ps->elements->right->right = NULL;
ps->elements->middle->sign1 = Find_MaxDepth_Leaves(ps->elements->middle->middle);//重新定义标志

if (ps->elements->right->middle != NULL)
{
ps->elements->right->sign1 = Find_MaxDepth_Leaves(ps->elements->right->middle);
ps->elements->sign1 = Find_MaxDepth_Leaves(ps->elements->middle);
ps->elements->sign2 = Find_MaxDepth_Leaves(ps->elements->right);
}
//如果右节点的中节点存在,那么说明调整刚刚好,否则,把右节点唯一的节点放到中节点的右节点上,并且销毁右节点
else
{
ps->elements->middle->right = ptmp2; ps->elements->sign2 = Find_MaxDepth_Leaves(ps->elements->middle->right);
ps->elements->sign1 = Find_MaxDepth_Leaves(ps->elements->middle);
free(ps->elements->right); ps->elements->right = NULL;
}
return NULL;//头节点并没有发生任何变化
}
else//ps->elements->right == NULL
{
if (ps->prev == NULL)//如果到达了根节点,还不能调整平衡成功,我们删除头节点,并且重新定义头结点
{
ps->elements->left->right = ps->elements->middle->left;
ps->elements->left->sign2 = Find_MaxDepth_Leaves(ps->elements->left->right);

newroot = ps->elements->left;//重新定义根节点
Height_plus(newroot, 0);

free(ps->elements->middle); free(ps->elements);
return newroot;
}
else continue;//如果没达到根节点,那么我们继续调整
}
}
else//ps->elements->middle->middle != NULL,不用调整了
{
ps->elements->sign1 = Find_MaxDepth_Leaves(ps->elements->left);
ps->elements->sign2 = Find_MaxDepth_Leaves(ps->elements->middle);
ps->elements->middle->sign1 = Find_MaxDepth_Leaves(ps->elements->middle->middle);//别忘了还有个中节点的sign1
ps->elements->middle->middle->right = NULL;//截断
return NULL;
}


比如这样的代码,总感觉自己写的很长,很啰嗦,其实实现的原理很简单

另外我不是计算机专业的,我是应用物理专业的,我想往嵌入式发展,可是我觉得算法很重要,但是我们这个专业不学离散数学这样的数学,自己学时间不是很够,而且我怕我自己学不透,应该怎么办呢

10 个解决方案

#1


算法书最好的要数Robert Sedgewick这个人的,他代码不一定是最好的,但是他讲道理极为透彻!

#2


你是新手啊?为什么不发到c++区,发到这个冷宫地方,不怕被贬为安常在啊!

#3


不要把兴趣变成职业。这样,你会同时毁了2者的。

#4


3L + 1

 如果代码大量出现a.b.c.d 或者 a->b->c->d  就说明代码设计不好   你需要做的就是添加一些成员函数  比如在a里直接添加获取d的成员函数

#5


思维复杂的人就会写出发杂的代码,估计更应该能解决更多的复杂的世界问题吧? 老觉得自己的代码写的很臃肿,怎么办

#6


引用 2 楼 yshuise 的回复:
你是新手啊?为什么不发到c++区,发到这个冷宫地方,不怕被贬为安常在啊!


的确是新手 老觉得自己的代码写的很臃肿,怎么办

#7


引用 4 楼 bear234 的回复:
3L + 1

 如果代码大量出现a.b.c.d 或者 a->b->c->d  就说明代码设计不好   你需要做的就是添加一些成员函数  比如在a里直接添加获取d的成员函数


这样啊,好的

#8


ps->elements->left->right

你这还是没加上指针判空的代码, 要是加上指针判空, 你会发现你的代码将更长.

#9


请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。

意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。

试对比
图书馆(对图书的分类够结构化了吧)

搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索)
哪个处理信息更方便、更高效。

所以
与其费劲去重构代码让其看上去更简洁、更合理
不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。

结构越复杂,越难修改,越难除错。
有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。

程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George

#10


引用 3 楼 taodm 的回复:
不要把兴趣变成职业。这样,你会同时毁了2者的。


可是,物理这个专业出来想找到工作,对于我来说,好像只有这个- -

而且我自己对编程也有一定想法吧。。。想到在这个方向上发展

#1


算法书最好的要数Robert Sedgewick这个人的,他代码不一定是最好的,但是他讲道理极为透彻!

#2


你是新手啊?为什么不发到c++区,发到这个冷宫地方,不怕被贬为安常在啊!

#3


不要把兴趣变成职业。这样,你会同时毁了2者的。

#4


3L + 1

 如果代码大量出现a.b.c.d 或者 a->b->c->d  就说明代码设计不好   你需要做的就是添加一些成员函数  比如在a里直接添加获取d的成员函数

#5


思维复杂的人就会写出发杂的代码,估计更应该能解决更多的复杂的世界问题吧? 老觉得自己的代码写的很臃肿,怎么办

#6


引用 2 楼 yshuise 的回复:
你是新手啊?为什么不发到c++区,发到这个冷宫地方,不怕被贬为安常在啊!


的确是新手 老觉得自己的代码写的很臃肿,怎么办

#7


引用 4 楼 bear234 的回复:
3L + 1

 如果代码大量出现a.b.c.d 或者 a->b->c->d  就说明代码设计不好   你需要做的就是添加一些成员函数  比如在a里直接添加获取d的成员函数


这样啊,好的

#8


ps->elements->left->right

你这还是没加上指针判空的代码, 要是加上指针判空, 你会发现你的代码将更长.

#9


请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。

意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。

试对比
图书馆(对图书的分类够结构化了吧)

搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索)
哪个处理信息更方便、更高效。

所以
与其费劲去重构代码让其看上去更简洁、更合理
不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。

结构越复杂,越难修改,越难除错。
有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。

程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George

#10


引用 3 楼 taodm 的回复:
不要把兴趣变成职业。这样,你会同时毁了2者的。


可是,物理这个专业出来想找到工作,对于我来说,好像只有这个- -

而且我自己对编程也有一定想法吧。。。想到在这个方向上发展