主要内容:
1)数据结构
栈、队列、链表、二叉树
2)算法
2种查找算法 + 4种排序算法
重点:
理解数据结构的特性及算法的思想。
一、数据结构
1、数据结构的概念和分类
1)基本概念
a. 数据结构指数据在计算机中的存储和组织形式,也就是相互之间存在一种或者多种特定关系的数据的集合;
b.数据结构选择会影响运行效率(时间复杂度)存储效率(空间复杂度);
2)基本分类
a. 逻辑结构:(逻辑关系)
集合结构、线性结构(前趋元素、后继元素)、树形结构(根元素 \ 起始元素、叶元素)、网状结构/图形结构
b. 物理结构:(位置关系)
顺序结构、链式结构(节点:数据、地址)
c. 运算结构:
描述数据结构的特性及实现方法;(创建、销毁、增删改查)
2、数组和链表比较
1)数组的特点
优点:
a. 支持下标访问,随机访问方便;
b. 只需要存储数据元素本身的内存空间,相对来说比较节省内存空间;
缺点:
a. 需要预知元素的个数来确定内存空间的大小;
b. 连续内存空间的要求导致小块的空间内存无法被使用,导致空间的利用率比较低;
c. 插入/删除元素时,可能会导致大量元素的移动,因此执行效率相对比较低;
2)链表的特点
优点:
a. 不需要预知元素个数来确定存储空间的总大小,使用动态内存进行管理即可;
b. 不需要连续的存储空间,因此内存空间的利用率相对比较高;
c. 插入/删除元素时,只需要改变指针的指向即可,不需要移动元素本身,因此执行效率比较高;
缺点:
a. 不支持下标访问,实现随机访问也不方便;
b. 除了存储数据元素本身的内存空间外,还需要额外的内存空间来表达数据元素之间的逻辑关系,因此相对来说比较浪费内存空间;
二、栈的基本概念和操作(Stack)
1、基本概念:
后进先出(LIFO:last in first out)
2、基本操作
- 创建(stack_create)
- 销毁(stack_destroy)
- 入栈(stack_push)
- 出栈(stack_pop)
- 判断栈是否为空(stack_empty)
- 判断栈是否为满(stack_full)
- 遍历栈中所有元素(stack_travel)
- 查看栈顶元素(stack_peek)
- 计算栈中有效元素的个数(stack_size)
练习:
1)顺序结构实现栈的操作;
2)链式结构实现栈的操作;
3)实际应用(小鼠走迷宫等);
三、队列的基本概念和操作(Queue)
1、基本概念
a. 队列本质上就是一种具有先进先出特性的数据结构。(FIFO)
b. 队列是一种在两端进行增删操作的数据结构,其中插入元素的一端叫做队尾;删除元素的一端叫做队首/队头。
c. 队列属于逻辑结构中的线性结构,分别可以采用物理结构中的顺序结构和链式结构实现。
2、基本操作
- 创建(queue_create)
- 销毁(queue_destroy)
- 判断是否为空(queue_empty)
- 判断是否为满(queue_full)
- 入队(queue_push)
- 出队(queue_pop)
- 遍历队列中所有元素(queue_travel)
- 查看队首元素值(queue_front)
- 查看队尾元素值(queue_back)
- 计算队列中有效元素的个数(queue_size)
- 清空队列中所有元素(queue_clear)
练习:
1)顺序结构实现队列的操作;
2)链式结构实现队列的操作;