程序设计=数据结构+算法
数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合。算法
传统上,咱们把数据结构分为逻辑结构和物理结构。编程
逻辑结构:是指数据对象中数据元素之间的相互关系,也是咱们从此最须要关注和讨论的问题。数组
物理结构:是指数据的逻辑结构在计算机中的存储形式。数据结构
经常使用的数据结构有:编程语言
数组,队列(queue),堆(heap),栈(stack),链表(linked list ),树(tree),图(graph)和散列表(hash)
栈(stack):运算只在表的一端进行;队列(Queue):运算只在表的两端进行。spa
队列(queue)是只容许在一端进行插入操做,而在另外一端进行删除操做的线性表。设计
与栈相反,队列是一种先进先出(First In First Out, FIFO)的线性表。code
与栈相同的是,队列也是一种重要的线性结构,实现一个队列一样须要顺序表或链表做为基础。对象
集合结构blog
线性结构
树形结构
图形结构
数据元素的存储结构形式有两种:顺序存储和链式存储。
例如咱们编程语言的数组结构就是这样滴。
链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元能够是连续的,也能够是不连续的。
链式存储结构
线性表:就好像是排队同样,具备线同样性质的结构,它是由零个或多个数据元素组成的有限序列。
若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其余元素都有且只有一个前驱和后继。
若将线性表记为(a1,…,ai-1,ai,ai+1,…an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。
数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操做的总称。
例如不少编程语言的整型,浮点型,字符型这些指的就是数据类型。
在计算机中,内存不是无限大的,若是要计算或处理一些较大的数时,须要开辟较大的内存空间,因而就要对计算机进行数据类型分类,分出多种数据类型来适合各类不一样的计算条件差别。
在C语言中,数据类型能够分为:
原子类型:不能够再分解的基本类型,例如整型、浮点型、字符型等。
结构类型:由若干个类型组合而成,是能够再分解的,例如整型数组是由若干整型数据组成的。
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,而且每条指令表示一个或多个操做。
算法具备五个基本特征:输入、输出、有穷性、肯定性和可行性。
输出:算法至少有一个或多个输出。
有穷性:指算法在执行有限的步骤以后,自动结束而不会出现无限循环,而且每个步骤在可接受的时间内完成。
肯定性:算法的每个步骤都具备肯定的含义,不会出现二义性。
可行性:算法的每一步都必须是可行的,也就是说,每一步都可以经过执行有限次数完成。
正确性:算法的正确性是指算法至少应该具备输入、输出和加工处理无歧义性、能正确反映问题的需求、可以获得问题的正确答案。
高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:
1. 算法采用的策略,方案 2. 编译产生的代码质量 3. 问题的输入规模 4. 机器执行指令的速度
咱们能够想象,线性表有两种物理存储结构:顺序存储结构和链式存储结构。
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表(a1,a2,…,an)的顺序存储以下:
#define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length; // 线性表当前长度 } SqList;
总结下,顺序存储结构封装须要三个属性:
存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置。
线性表的最大存储容量:数组的长度MaxSize。
线性表的当前长度:length。
若是插入位置不合理,抛出异常; 若是线性表长度大于等于数组长度,则抛出异常或动态增长数组容量; 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置; 将要插入元素填入位置i处; 线性表长+1。