目录
[1. 软件危机:为什么程序员总在加班?](#1. 软件危机:为什么程序员总在加班?)
[2. 软件生命周期:软件的一生](#2. 软件生命周期:软件的一生)
[1. 顺序表 (Sequential List)](#1. 顺序表 (Sequential List))
[2. 链表 (Linked List)](#2. 链表 (Linked List))
一、软件工程导论(宏观篇)
1. 软件危机:为什么程序员总在加班?
软件危机是指在计算机软件开发和维护过程中所遇到的一系列严重问题。
-
核心痛点(必考):
-
估不准:成本和进度经常超出预期。
-
不满意:用户拿到的产品和想的不一样。
-
质量差:Bug 满天飞,可靠性低。
-
难维护:前人写的代码像"屎山",后人不敢动。
-
没文档:开发过程缺乏记录,全靠开发者大脑记忆。
-
注释(深度理解): 软件危机的产生不是因为程序员变笨了,而是软件的规模和复杂度增长速度远远超过了人类手工管理的能力。就像盖一间草房不需要蓝图,但盖一座摩天大楼如果没有工程学,必倒无疑。
2. 软件生命周期:软件的一生
软件不仅仅是"写代码"。它从出生到消亡经历三个阶段:
-
定义期 :可行性研究、需求分析(搞清楚做什么)。
-
开发期 :概要设计、详细设计、编码、测试(搞清楚怎么做并付诸实践)。
-
维护期 :改正性维护、完善性维护等(确保一直好用)。
二、数据结构------线性表(微观篇)
1. 顺序表 (Sequential List)
就像火车站排队,每个人必须挨着坐,逻辑上相邻,物理上也必须相邻。
-
特点 :随机存取。通过
瞬间定位。
-
代价:
-
插入 :平均移动
个元素。
-
删除 :平均移动
个元素。
-
-
时间复杂度 :查找
,增删
。
2. 链表 (Linked List)
就像玩"寻宝游戏",你手里只有下一个人的线索(指针)。逻辑相邻,物理上可以各在天涯。
-
核心操作(考研/面试常客):
在
节点后插入
节点:
css->next = p->next; // 1. 先接后路 p->next = s; // 2. 再断前路
注释(避坑指南): 顺序千万不能反!如果先写
p->next = s,那么原本指向后面那个节点的指针就丢失了,整条链表就像断了线的风筝,找不回来了。
知识卡片:一表对比
| 特性 | 顺序表 (Array) | 链表 (Linked List) |
|---|---|---|
| 存储空间 | 预先分配,可能浪费 | 动态分配,利用率高 |
| 存取速度 | ||
| 增删效率 | ||
| 适用场景 | 存储规模固定,频繁查询 | 存储规模未知,频繁增删 |
心得
第一天的学习让我们明白:软件工程是教你如何"避坑",数据结构是教你如何"加速"。
对于软件危机,记住它不仅仅是技术问题,更多是管理和沟通的问题。
对于线性表,一定要在纸上画出指针指向的过程,脑子里有了图,代码自然就顺了。
课后练习建议:
尝试在不看书的情况下,手写一遍单链表的逆置算法。这是检验你是否真正掌握指针逻辑的"金标准"。