“基础知识”的版本间的差异

来自软件实验室
跳转至: 导航搜索
基础算法
番外篇
 
(未显示2个用户的16个中间版本)
第1行: 第1行:
== 计算机体系结构 ==
+
基础知识的掌握程度决定了你未来的高度。夯实基础,无论如何强调都不过分。
  
== C语言 ==
+
== 应知应会 ==
  
== 基础算法 ==
+
* [[计算机体系结构]]
===排序===
+
* [[C语言]]
;* 最快最简单的排序--桶排序
+
* [[基础算法]]
      直观的说,使用一个适当长度的一维数组,当数字出现一次的时候,就将对应数组下标的值加1,最后直接输出数组中非零值的数组下标,即为桶排序!<BR>
+
* [[数据结构]]
      代码如下:
+
* [[软件工程]]
      [[文件:BucketSimple.c]]
+
* [[单元测试]]
;*选择排序
+
* [[XML]],[[JSON]]
      基本思想就是:每次遍历,只选择最值元素进行交换,这样一次遍历,只需进行一次交换即可,从而避免了其它无价值的交换操作。
+
* [[正则表达式]]
      具体方法为:
+
* [[设计模式]]
      遍历一次,记录下最值元素所在位置,遍历结束后,将此最值元素调整到合适的位置
+
* [[TCP/IP]]
      这样一次遍历,只需一次交换,便可将最值放置到合适位置
+
* [[HTTP协议]]
      [[文件:ChooseSort.c]]
+
;* 冒泡排序
+
      冒泡排序的基本思想是,每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来!<BR>
+
      代码如下:
+
      [[文件:BubbleSort.c]]
+
 
+
;* 快速排序
+
      快速排序采用的思想是分治思想。
+
      快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速  排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
+
      举例说明一下吧,这个可能不是太好理解。假设要排序的序列为
+
        2 2 4 9 3 6 7 1 5 首先用2当作基准,使用i j两个指针分别从两边进行扫描,把比2小的元素和比2大的元素分开。首先比较2和5,5比2大,j左移
+
        2 2 4 9 3 6 7 1 5 比较2和1,1小于2,所以把1放在2的位置
+
        2 1 4 9 3 6 7 1 5 比较2和4,4大于2,因此将4移动到后面
+
        2 1 4 9 3 6 7 4 5 比较2和7,2和6,2和3,2和9,全部大于2,满足条件,因此不变
+
        经过第一轮的快速排序,元素变为下面的样子
+
        [1] 2 [4 9 3 6 7 5]
+
      之后,在把2左边的元素进行快排,由于只有一个元素,因此快排结束。右边进行快排,递归进行,最终生成最后的结果。<BR>
+
      代码如下:
+
      [[文件:QKSORT.c]]
+
 
+
== 数据结构 ==
+
===准备内容===
+
注意:看下面内容之前,建议先复习下c语言基本知识,可以参考郝斌的c大纲。
+
#指针
+
#结构体
+
#动态内存分配
+
===数组===
+
[[文件:Arr.cpp]]
+
 
+
===链表===
+
[[文件:list.cpp]]
+
=== 链表的应用 ===
+
*
+
  [[文件:Stack.cpp]]
+
*队列
+
**链式队列
+
**循环队列 
+
    [[文件:circleQueue.cpp]]
+
----
+
'''''线性结构和非线性结构的分界线'''''
+
----
+
 
+
===树===
+
 
+
===图===
+
 
+
===补充内容===
+
*[http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/19/2508807.html 递归与循环的简单比较说明 ]
+
 
+
== 软件工程基本概念 ==
+
 
+
== 设计模式 ==
+
  
 
== 番外篇==
 
== 番外篇==
===看懂一个程序的步骤===
+
* [[看懂一个程序的步骤]]
*流程
+
* [[预防因数组下标越界导致程序出错的问题]]
:::首先搞明白程序中语句的执行顺序。
+
* [http://learnxinyminutes.com/ 编程语言的Cheat手册]
*语句功能
+
:::需要在搞明白流程的基础上,看每个类,每个方法中每条语句的功能以及执行后产生的结果。PS:单步调试是个好方式
+
*试数
+
:::将自己虚拟的一些符合程序定义的数据带入程序中,看执行后的结果如何!
+
 
+
===预防因数组下标越界导致程序出错的问题===
+
典型的例子就是使用for循环的时候,当遍历一个数组中的所有元素时,例如
+
 
+
----
+
int a[4] ={1,2,3,4};
+
 
+
int i;
+
 
+
for(i = 0; i < 4;i++)
+
{
+
    // do Somethings...
+
}
+
----
+
 
+
在这里使用的是i<4而不是i<=3,我们以高等数学中的一张图来解释:
+
 
+
[[文件:数组内容表示.png]]
+
 
+
按照图示内容进行分析可以尽量避免数组越界导致的一些问题!
+

2015年12月4日 (五) 10:02的最新版本

基础知识的掌握程度决定了你未来的高度。夯实基础,无论如何强调都不过分。

应知应会

番外篇