开发工具与关键技术:
作者:Mr_恺
撰写时间:2020.5.6
1.1:即使是在广泛采用可视化程序设计的今天,借助于集成开发环境可以很快地生成程序,但要想成为一个专业的程序开发人员,至少需要以下三个条件:
(1)能够熟练地选择和设计各种业务逻辑的数据结构和算法
(2)至少能够熟练地掌握一门程序设计语言
(3)熟知所涉及相关应用领域知识
1.2:数据结构:
一、逻辑结构
(1)线性结构:结构中的数据元素之间存在着一对一的线性关系。
(除第一个和最后一个数据元素外,每个数据元素只有一个前驱和一个后续数据元素。)
(2)树结构:结构中的数据元素之间存在着一对多的层次关系。
(除根节点外,每个元素只有一个前驱数据元素,可有0个或若干个后续数据元素。)
(3)图结构:结构中的元素之间存在着多对多的任意关系。
(每个数据元素可有0个或若干个前驱数据元素和0个或若干个后续数据元素。)
二、逻辑结构的延伸基本算法
三、物理结构
四、运算集合(基本操作)
1.3:算法
算法是解决问题的方法,是程序设计的精髓,程序设计的实质就是构造解决问题的算法。算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。
算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
五个特性(有穷性、确定性、可行性、输入、输出)
(正确性、可读性、健壮性、效率与地存储量需求)
四、算法分析
(1)算法效率的质量
(1.算法本身选用的策略、2.书写程序的语言、
3.编译产生的代码质量、4.机器执行指令的速度、5.问题的规模)
(2)算法的时间复杂度
(1.常量阶时间复杂度、2.线性阶时间复杂度、3.平方阶时间复杂度)
(3)算法的空间复杂度
2.1:线性表
一、特征:
1.在非空的线性表,有且仅有一个开始结点a1,它内有直接前趋,而仅有一个直接后继a2.
2.有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋an-1;
3.其余的内部结点ai(2≦i≧n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1。
二、线性表的基本运算:
2.2:线性表有两种存储方式
2.3:顺序表
顺序表一般表现为数组,使用一组地址连续的存储单元依次存储数据元素
(1)长度固定,必须在分配内存之前确定数组的长度。
(2)存储空间连续,即允许元素的随机访问。
(3)存储密度大,内存中存储的全部是数据元素。
(4)要访问特定元素,可以使用索引访问,时间复杂度为O(1).
(5)要想在顺序表中插入或删除一个元素,都涉及到之后所有元素的移动,因此时间复杂度为O(n).
2.3:单链表的结构:
(1)长度不固定,可以任意增删。
(2)存储空间不连续,数据元素之间使用指针相连,每个数据元素只能访问周围的一个元素(根据单链表还是双链表有所不同)。
(3)存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针)。
(4)要访问特定元素,只能从链表头开始,遍历到该元素,时间复杂度为O(n)
(5)在特定的数据元素之后插入或删除元素,不涉及到其他元素的移动,因此时间复杂度为O(1)
(6)双链表还允许在特定的数据元素之前插入或删除元素
3.1:栈
(一)栈的定义:
(二)栈的基本运算:
(三)栈的存储结构:
3.2:队列的定义:
初始化时:fornt=rear=0
循环队列为空的条件是:fornt=rear
4.1 串的定义
串是字符串的简称。在数据结构中,串是一种在数据元素的组成上具有一定约束条件的线性表,即要求组成线性表的所有数据元素都是字符,所以说串是一个有穷的字符序列。
4.1.1 定义
串是由零个或多个字符组成的有限序列,记作s=”s0s1…sn-1”(n≥0),其中s是串名,字符个数n称作串的长度,双撇号括起来的字符序列”s0s1…sn-1”是串的值。每个字符可以是字母、数字或任何其它的符号。零个字符的串(即:””)称为空串,空串不包含任何字符。值得注意的是:
(1)长度为1的空格串" "不等同于空串"";
(2)值为单个字符的字符串不等同于单个字符,如"a"与′a′;
(3)串值不包含双撇号,双撇号是串的定界符。
串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串则称为主串。通常将字符在串中的序号称为该字符在串中的位置。子串在主串钟的位置则以该子串在主串中的第一个字符位置来表示。为了让大家更好的理解子串,举个简单的例子说明。如:
s="I am from Canada.";
s1="am.";
s2="am";
s3="I am";
s4="I am ";
s5="I am";
s2、s3、s4、s5都是s的子串,或者说s是s2、s3、s4、s5的主串,而s1不是s的子串。s3等于s5,s2不等于s4。s的长度是17,s3的长度是4,s4的长度是5。
4.1.2 串的基本算法
串的基本算法在串的应用中广泛使用,这些基本算法不仅加深了对串的理解,更简化了日后对串的应用。下面还是通过举例介绍串的常用基本算法。
假设有以下串:s1="I am a student",s2="teacher",s3="student",常用的串的基本运算有下列几种:
(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。