2023年数据结构复习笔记.doc
《2023年数据结构复习笔记.doc》由会员分享,可在线阅读,更多相关《2023年数据结构复习笔记.doc(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章 概 论1.数据:信息的载体,能被计算机辨认、存储和加工解决。2.数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标记单位。3.数据结构:数据之间的互相关系,即数据的组织形式。它涉及:1)数据的逻辑结构,从逻辑关系上描述数据,与数据存储无关,独立于计算机;2)数据的存储结构,是逻辑结构用计算机语言的实现,依赖于计算机语言。3)数据的运算,定义在逻辑结构上,每种逻辑结构都有一个运算集合。常用的运算:检索/插入/删除/更新/排序。4.数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。数据的存储结构是逻辑结构用计算机语言的实现。5.数据类型:一个值的集合及在值上定
2、义的一组操作的总称。分为:原子类型和结构类型。6.抽象数据类型:抽象数据的组织和与之相关的操作。优点:将数据和操作封装在一起实现了信息隐藏。7. 抽象数据类型ADT:是在概念层上描述问题;类:是在实现层上描述问题;在应用层上操作对象(类的实例)解决问题。8.数据的逻辑结构,简称为数据结构,有:(1)线性结构,若结构是非空集则仅有一个开始和终端结点,并且所有结点最多只有一个直接前趋和后继。(2)非线性结构,一个结点也许有多个直接前趋和后继。9.数据的存储结构有:1)顺序存储,把逻辑相邻的结点存储在物理上相邻的存储单元内。2)链接存储,结点间的逻辑关系由附加指针字段表达。3)索引存储,存储结点信息
3、的同时,建立附加索引表,有稠密索引和稀疏索引。4)散列存储,按结点的关键字直接计算出存储地址。 10.评价算法的好坏是:算法是对的的;执行算法所耗的时间;执行算法的存储空间(辅助存储空间);易于理解、编码、调试。 11.算法的时间复杂度T(n):是该算法的时间花费,是求解问题规模n的函数。记为O(n)。时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、k次方阶O(nk)、指数阶O(2n)。13.算法的空间复杂度S(n):是该算法的空间花费,是求解问题规模n的函数。12.算法衡量:是用时间复
4、杂度和空间复杂度来衡量的,它们合称算法的复杂度。13. 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。 第 二 章 线 性 表 1.线性表:是由n(n0)个数据元素组成的有限序列。3.顺序表:把线性表的结点按逻辑顺序存放在一组地址连续的存储单元里。4.顺序表结点的存储地址计算公式:Loc(ai)=Loc(a1)+(i-1)*C;1in 5.顺序表上的基本运算public interface List /返回线性表的大小,即数据元素的个数。public int getSize();/假如线性表为空返回 true,否则返回 false。public boolean isEmp
5、ty();/判断线性表是否包含数据元素 e public boolean contains(Object e);/将数据元素 e 插入到线性表中 i 号位置public void insert(int i, Object e) throws OutOfBoundaryException;/删除线性表中序号为 i 的元素,并返回之public Object remove(int i) throws OutOfBoundaryException;/删除线性表中第一个与 e 相同的元素public boolean remove(Object e);/返回线性表中序号为 i 的数据元素public O
6、bject get(int i) throws OutOfBoundaryException; 在顺序表上插入要移动表的n/2结点,算法的平均时间复杂度为O(n)。在顺序表上删除要移动表的(n+1)/2结点,算法的平均时间复杂度为O(n)。 public class ListArray implements List private final int LEN = 8; /数组的默认大小private Strategy strategy; /数据元素比较策略private int size; /线性表中数据元素的个数private Object elements; /数据元素数组/构造方法pu
7、blic ListArray (Strategy strategy)size = 0;elements = new ObjectLEN;/返回线性表的大小,即数据元素的个数。public int getSize() return size;/假如线性表为空返回 true,否则返回 false。public boolean isEmpty() return size=0;/判断线性表是否包含数据元素 e public boolean contains(Object e) for (int i=0; isize; i+)if ( e = = elementsi) return true;retur
8、n false;/将数据元素 e 插入到线性表中 i 号位置public void insert(int i, Object e) throws OutOfBoundaryException if (isize)throw new OutOfBoundaryException(错误,指定的插入序号越界。);if (size = elements.length)expandSpace();for (int j=size; ji; j-)elementsj = elementsj-1; elementsi = e; size+;return;private void expandSpace()Ob
9、ject a = new Objectelements.length*2;for (int i=0; ielements.length; i+)ai = elementsi;elements = a;/删除线性表中序号为 i 的元素,并返回之public Object remove(int i) throws OutOfBoundaryException if (i=size)throw new OutOfBoundaryException(错误,指定的删除序号越界。);Object obj = elementsi;for (int j=i; jsize-1; j+)elementsj = e
10、lementsj+1;elements-size = null;return obj;/替换线性表中序号为 i 的数据元素为 e,返回原数据元素public Object replace(int i, Object e) throws OutOfBoundaryException if (i=size)throw new OutOfBoundaryException(错误,指定的序号越界。); Object obj = elementsi;elementsi = e;return obj;/返回线性表中序号为 i 的数据元素public Object get(int i) throws Out
11、OfBoundaryException if (i=size)throw new OutOfBoundaryException(错误,指定的序号越界。);return elementsi;/删除线性表中第一个与 e 相同的元素public boolean remove(Object e) int i = indexOf(e);if (i0) return false;remove(i);return true;6.单链表:只有一个链域的链表称单链表。在结点中存储结点值和结点的后继结点的地址,data next data是数据域,next是指针域。 (1)建立单链表。时间复杂度为O(n)。加头结
12、点的优点:1)链表第一个位置的操作无需特殊解决;2)将空表和非空表的解决统一。(2)查找运算。时间复杂度为O(n)。 public class SLNode implements Node private Object element;private SLNode next;public SLNode(Object ele, SLNode next)this.element = ele;this.next = next;public SLNode getNext()return next;public void setNext(SLNode next)this.next = next;publ
13、ic Object getData() return element;public void setData(Object obj) element = obj;public class ListSLinked implements List private SLNode head; /单链表首结点引用private int size; /线性表中数据元素的个数public ListSLinked () head = new SLNode(); size = 0;/辅助方法:获取数据元素 e 所在结点的前驱结点private SLNode getPreNode(Object e) SLNode
14、 p = head;while (p.getNext()!=null) if (p.getNext().getData()=e) return p; else p = p.getNext();return null;/辅助方法:获取序号为 0=i0; i-) p = p.getNext(); return p;/获取序号为 0=i0; i-) p = p.getNext(); return p;/返回线性表的大小,即数据元素的个数。public int getSize() return size;/假如线性表为空返回 true,否则返回 false。public boolean isEmpty
15、() return size=0;/判断线性表是否包含数据元素 e public boolean contains(Object e) SLNode p = head.getNext(); while (p!=null) if (p.getData()=e) return true; else p = p.getNext(); return false;/将数据元素 e 插入到线性表中 i 号位置public void insert(int i, Object e) throws OutOfBoundaryException if (isize) throw new OutOfBoundary
16、Exception(错误,指定的插入序号越界。); SLNode p = getPreNode(i); SLNode q = new SLNode(e,p.getNext(); p.setNext(q); size+; return; /删除线性表中序号为 i 的元素,并返回之public Object remove(int i) throws OutOfBoundaryException if (i=size) throw new OutOfBoundaryException(错误,指定的删除序号越界。); SLNode p = getPreNode(i); Object obj = p.g
17、etNext().getData(); p.setNext(p.getNext().getNext(); size-; return obj;/删除线性表中第一个与 e 相同的元素public boolean remove(Object e) SLNode p = getPreNode(e); if (p!=null) p.setNext(p.getNext().getNext(); size-; return true; return false;/替换线性表中序号为 i 的数据元素为 e,返回原数据元素public Object replace(int i, Object e) throw
18、s OutOfBoundaryException if (i=size) throw new OutOfBoundaryException(错误,指定的序号越界。); SLNode p = getNode(i); Object obj = p.getData(); p.setData(e); return obj;/返回线性表中序号为 i 的数据元素public Object get(int i) throws OutOfBoundaryException if (i=size) throw new OutOfBoundaryException(错误,指定的序号越界。); SLNode p =
19、 getNode(i); return p.getData();7.循环链表:是一种首尾相连的链表。特点是无需增长存储量,仅对表的链接方式修改使表的解决灵活方便。8.空循环链表仅由一个自成循环的头结点表达。9.很多时候表的操作是在表的首尾位置上进行,此时头指针表达的单循环链表就显的不够方便,改用尾指针rear来表达单循环链表。用头指针表达的单循环链表查找开始结点的时间是O(1),查找尾结点的时间是O(n);用尾指针表达的单循环链表查找开始结点和尾结点的时间都是O(1)。10.在结点中增长一个指针域,prior|data|next。形成的链表中有两条不同方向的链称为双链表。public clas
20、s DLNode implements Node private Object element;private DLNode pre;private DLNode next;public DLNode(Object ele, DLNode pre, DLNode next)this.element = ele;this.pre = pre;this.next = next;public DLNode getNext()return next;public void setNext(DLNode next)this.next = next;public DLNode getPre() retur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 数据结构 复习 笔记
限制150内