第1-7课:基础开胃菜
本系列前几课分别介绍了算法的常用设计模式、建立数据模型的常用思路和方法。其实,用代码实现的算法肯定还会包含一些代码特有的技巧,这一课就来介绍一些这样的技巧。这些巧妙构思的代码技巧,有些体现了效率,有些体现了程序设计的一致性原则,有些则体现了软件架构的一些好思想;这些技巧,都可以在今后的算法设计中直接或间接使用,即使用不上,了解这些内容对于开阔思维还是很有益处的,更不用说其中一些技巧都是常见或不常见的面试题了。
常用技巧
哨兵位
设置哨兵位是程序设计中常用的技巧之一,常用在线性表的处理过程中,比如查找和移动数据操作。哨兵位通常起到两个作用,一个是作为一个临时存储空间使用,另一个是减少不必要的越界判断,简化算法代码复杂度。比如环形链表通常会设置一个表头节点,无论向前或向后遍历,均以这个表头节点为遍历越界(重复)的依据,这样维护链表的时候就不需要专门存储一个表头指针,这个表头节点可以理解为哨兵位。插入排序算法中也会利用表中的 0 号位置作为哨兵位使用,这个位置不仅起到一个临时存储空间的作用,还可以简化插入后移动数据的判断条件。注意下面的插入排序代码,内层 while 循环移动数据的时候,只需判断当前位置的数是否比 ls[0] 位置大即可,不需要关心 j 的位置是否小于 1 而越界,因为当 j=1 的时候,ls[j - 1] > ls[0] 的条件肯定不满足,while 循环就会终止。如果不使用哨兵位,内层移动数据的循环处理代码就需要增加 j 是否越界的判断。
//带哨兵位的插入排序,ls[0]是哨兵位,数据从ls[1]开始存放
void insert_sort(int *ls, int n)
{for (int i
第1-7课:基础开胃菜相关推荐
- 1.开胃菜(基础篇)
1. 开胃菜 如果你在电脑上做了很多工作,最终你会发现有些任务你想自动化.例如,您可能希望对大量文本文件执行搜索和替换,或者以复杂的方式重命名和重新排列一堆照片文件.也许您想编写一个小型的自定义数据库 ...
- Python教程之开胃菜
Python教程之开胃菜 如果你使用电脑做很多工作,最终你会发现有些工作愿意自动化.举个栗子,你可能需要对大量的文本文件执行"搜索-替换"操作,或者重命名/重新排序一堆照片文件,用 ...
- Python 开胃菜
开胃菜 如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理.比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理.也许你想要编写一个 ...
- 《程序分析:开胃菜》概览
<静态分析:开胃菜>概览 <程序分析:开胃菜>比高级课程<Principles of Program Analysis>更加基础.和另一本书<形式化方法:开胃 ...
- python菜_1. 开胃菜 — Python tutorial 3.6.3 documentation
1. 开胃菜¶ 如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理.比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理.也许你想要 ...
- 魅族 MX3 深入拆解第一季:开胃菜
楼主:海岛猫鼬1213 时间:2013-10-25 17:14:00 点击:1420 回复:9 楼主发言:1次 发图:0张 回复 收藏 更多 楼主 各位久等了.从今天开始,楼主会连载MX3 ...
- 数据结构:完全二叉树开胃菜小练习
目录 一.前言 二.完全二叉树的重要结构特点 三.完全二叉树开胃菜小练习 1.一个重要的数学结论 2.简单的小练习 一.前言 关于树及完全二叉树的基础概念(及树结点编号规则)参见:http://t.c ...
- C#面向对象(一):明确几个简单的概念作为开胃菜
绝对干货,总结了下C#面向对象的干货内容以及我几年来的使用心得,分享出来 先明确几个简单概念作为开胃菜: 1.命名空间 namespace BackStageManagement.Services 关 ...
- MateRS能不能升级鸿蒙,华为MateRS只是开胃菜:麒麟980+1536G+5G芯片,网友:确实很吓人!...
原标题:华为MateRS只是开胃菜:麒麟980+1536G+5G芯片,网友:确实很吓人! 华为手机作为国内很既有实力的手机厂商,乃至在世界上都是数一数二的高端手机厂商.华为旗下大家众所周知的两大旗舰产 ...
最新文章
- asp导出word中文乱码_解决文档打开乱码问题丨小工具系列
- 手把手 | 教你爬下100部电影数据:R语言网页爬取入门指南
- atoi,atol,strtod,atof
- 【推荐系统】五个工业风满满的 Look-alike 算法
- IOS15全屏滑动返回
- IAR STM32工程报错Error[Pe020]: identifier “GPIO_Pin_0”is undefined D:\STM32F103_Demo\App\main.c
- mysql 事务回滚_SQL基础丨事务处理
- Android Studio(5)--创建 Android 库
- 打开.class文件
- yum源的三种安装配置方式,总有一款适合你
- VS2015社区版MFC安装
- 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
- 使用hexo基于cactus仙人掌主题最全美化客制教程
- Linux ip forward转发问题总结
- mysql五日均线_5日均线战法(建议收藏)
- Android平板app开发布局文件,Android平板开发相关
- Linux C/C++ 获取系统时间
- ios 倒数器_如何利用ps绘制IOS7风格的倒数计时器
- 联想拯救者 Y32p 显示器 评测
- 搞一下SOA | 03 DDS详解
热门文章
- Ubuntu20.04下配置Anaconda3+NVIDIA 驱动+Cuda11.1+Cudnn8.0.5
- 软件测试之测试用例颗粒度问题
- vue实现时间段选择组件,分星期,最小粒度半点
- 云南一脸通行业解决方案、钉钉智慧食堂、智慧餐厅、智慧工地解决方案
- 为什么很多人认为测试就是“鼠标点点点”?
- 量子计算机需要mK温度工作吗,格林函数法分析冷槽离子量子计算机中的温度效应.pdf...
- 【Java】实现统计字符串中大写、小写、数字字符出现次数
- 详解薄膜缺陷检测系统原理及功能
- 运维岗位面试被问到的问题
- 灭火器摆放识别检测算法 yolo