数据结构式相互之间存在一种或者多种特定关系的数据元素的集合
逻辑结构:
集合结构
线性结构
树形结构
图形结构
物理结构:
顺序存储结构
链式存储结构
算法的时间复杂度:就是算法的时间的量度,记作:T(n)=O(f(n)),表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作为算法的渐近时间复杂度。
常数阶O(1)
线性阶O(n)为一个N的循环
对数阶O(logN)
平方阶O(N^2)双层循环
算法空间复杂度是通过算法所需存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中n为问题的规模,f(n)为语句关于n所占存储函数。
时间复杂度是指运行时间的需求,使用空间复杂度来表示运行空间的需求
O(1)<O(logN)<O(n)<O(nlogN)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
线性表的优缺点:
优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间
可以快速地存取表中任一位置的元素
缺点:插入和删除操作需要移动大量元素,当线性表长度变化较大时,难以确定存储空间间的容量,造成存储空间的碎片
链表
链表的第一个结点存储的位置为头指针,链表的最后一个结点指针为“空”,通常使用NULL表示
头指针:头指针是指链表指向第一个结点的指针,若链表有结点,则是指向头结点的指针,头指针具有标识作用,所以常用头指针冠以链表的名字,无论链表是否为空,头指针都不为空。头指针式链表的必要的元素
头结点:
头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,与数据域一般无意义(也可以存放链表的长度),有了头结点,对在第一元素结点钱插入和删除第一节点其操作就与其他结点的操作就同一颗,头结点不一定是链表必须要素
抽象数据类型:(abstract data type,ADT)
ADT是带有一组操作的一些对象的集合。表,集合,图以及它们各自的操作都是形成的这些对象都可以看做是抽象数据类型。可以实行add,remove,size,contains,union,find操作。
在C++中表的ADT实现是由STL(标准模板库standard template library STL)中的vector实现的。vector的优点和缺点与表的数组的实现是一样的,在进行索引是常量时间,对于插入和删除时间比较久。
list是双向链表的实现,链表的插入和删除很容易,但是对于索引时很低