数据结构与算法

数据结构与算法

通过学习我发现计算机学科是一门综合性较强的专业基础课,是软件开发的技术基础。学习数据结构与算法,可以引导我们学会分析问题,弄清数据结构的特性,以使选择适当的逻辑结构、存储结构以及相对应的算法解决问题。

  1. 算法+数据结构=程序。

 

  1. 数据结构的家庭成员:线性结构、树结构、图结构

 

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=s0s1sn-1(n0),其中s是串名,字符个数n称作串的长度,双撇号括起来的字符序列s0s1sn-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)14Length(s3)7

(5)Equal(s,t),判断st是否相等。

(6)Equal(s2,s3)falseEqual("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)=7index(s1,s2)=1index(s1, "I")=0

 

你可能感兴趣的:(数据结构与算法)