数据结构与算法
通过学习我发现计算机学科是一门综合性较强的专业基础课,是软件开发的技术基础。学习数据结构与算法,可以引导我们学会分析问题,弄清数据结构的特性,以使选择适当的逻辑结构、存储结构以及相对应的算法解决问题。
3、算法是解决问题的方法,是程序设计的精髓,程序设计的实质就是构造解决问题的算法。算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理结构。算法是特定问题求解步骤的一种描述,它是指令的有限序列。
(1)一个算法具有五个重要特性:有穷性、确定性、可行性、输入性、输出性。
(2)算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求
(3)算法的分析:算法效率的度量、算法的时间复杂度(算法能呈现的时间复杂度还有:对数阶O(log2n),指数阶O(2n)等。)、算法的时间复杂度(量度 S(n)=O(f (n)))
4、线性表的定义:由n(n或=)个相同类型数据元素(节点)a1,a2,.......组成的有限序列。(a1,a2,...an).其中:n:数据元素的个数,也称表的长度。我们常常玩的扑克牌,其数据元素-牌,是由牌点、花色两项组成的,是复合数据类型,这种类型的线性表称为复合线性表。线性表的特征:
(1)、在非空的线性表,有且仅有一个开始节点a1,它没有直接前趋,而且仅有一个直接后继a2;
(2)、有且仅有一个终端节点an,它没有直接后续,而仅有一个直接前趋an-1;
(3)、其余的内部节点a1(2=i=n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1
线性表的基本运算:
<1>、求表长 ——求线性表中元素的个数
<2>、遍历——从左到右(从右到左)扫描(或读取)表中的各个元素
<3>、按编号查找——找出表中第i个元素
<4>、按特征查找——按某个特定值查找线性表
<5>、插入——在第i个位置上(即原第i个元素前)插入一新元素
<6>、删除——删除原表中的第i个元素
<7>、排序——按元素某特征值的递增(或递减)排序,重排表中各元素
(4)线性表的第一个元素没有直接前驱,最后一个元素没有直接后继。
(5)链表元素的地址可以是不连续的
5、堆栈的特点是”后进先出“。它后面来,反而它能最先走,所以我们说它是“蛮不讲理的堆栈“
(1)栈的存储结构有两种:顺序栈——采用顺序结构存储、链栈——采用链式结构存储
顺序栈的存储结构
#define MaxSize堆栈可能达到的最大长度
Typedef struct
{
Element Type elem[MaxSize];
Int top; /堆顶位置/
}
出栈
Pubilc object pop() throws Exception{
If(top=-1){
Throw new Exception(“堆栈已空!”)
}
Object obj=stack[top];
Top --;
Return obj;
}
栈满和栈空的条件是什么?
栈满:top = Maxsize -1
栈空:top=-1
6、队列的特点是“先进先出”这就符合我们乖乖排队的思想。
(1)队列的存储结构:<1>顺序队列——采用顺序结构存储 <2>链式结构——采用链式
对头指针进:front = (front + 1)%MaxSize
队尾指针进:rear = (rear + 1)%MaxSize
队空:front = rear
队满:rear= MaxSize – 1
(2)循环队列为满的条件是:front=(rear + 1)%Maxsize
(3)队列是只有一端可以操作的线性结构
7、串是字符串的简称。在数据结构中,串是一种在数据元素的组成上具有一定约束条件的线性表,即要求组成线性表的所有数据元素都是字符,所以说串是一个有穷的字符序列。
定义:串是由零个或多个字符组成的有限序列,记作s=”s0s1…sn-1”(n≥0),其中s是串名,字符个数n称作串的长度,双撇号括起来的字符序列”s0s1…sn-1”是串的值。每个字符可以是字母、数字或任何其它的符号。零个字符的串(即:””)称为空串,空串不包含任何字符。值得注意的是:
(1)长度为1的空格串" "不等同于空串"";
(2)值为单个字符的字符串不等同于单个字符,如"a"与′a′;
(3)串值不包含双撇号,双撇号是串的定界符。
串的基本运算:(1)Assign(s,t),将t的值赋给s。
(2)Assign(s4,s3)或Assign(s4,"student")后,s4="student"。
(3)Length(s),求s的长度。
(4)Length(s1)=14,Length(s3)=7。
(5)Equal(s,t),判断s与t是否相等。
(6)Equal(s2,s3)=false,Equal("student",s3)=true。
(7)Concat(s,t),将t连接到s的末尾。如:Concat(s3, " number")= "student number"。
(8)Substr(s,i,len),求子串。如:Substr(s1,7,7)= “student”,Substr(s1,10,0)= “”, Substr(s1,0,14)= "I am a student"。
(9)Insert(s,i,t),在s的第i个位置之前插入串t。 Insert(s3,0,"good_")后,s3="good_student"。
(10)Delete(s,i,len),删除子串。ss=“good_student”,Delete (ss,0,5)后,ss="student"。
(11)Replace(s,u,v),子串替换,即将s中的子串u替换为串v。 Replace(s1,s3,s2)后,s1=“I am a teacher”,Replace(s1,“worker”,s2)后s1的值不变。 若ss=“abcbcbc”,则:Replace(ss,“cbc”,“x”)后,ss="abxbc",Replace(ss,"cb","z")后,ss="abzzc"。
(12)index(s,t),子串定位,即求子串t在主串s中的位置。 index(s1,s3)=7,index(s1,s2)=-1,index(s1, "I")=0。