一、线性表
1.1 顺序表
1.1.1 顺序表的基本操作
1.1.1.1 插入操作
在顺序表中插入一个元素,需要将插入位置后的元素全部后移一位,然后将新元素插入到空出来的位置。
1.1.1.2 删除操作
在顺序表中删除一个元素,需要将删除位置后的元素全部前移一位,然后将一个元素删除。
1.1.1.3 查找操作
在顺序表中查找一个元素,需要遍历整个表,找到与要查找元素相等的元素。
1.1.1.4 修改操作
在顺序表中修改一个元素,需要先查找到该元素的位置,然后将其修改为新的元素。
1.1.2 顺序表的应用
1.1.2.1 线性表的顺序存储
线性表的顺序存储是指将线性表中的元素按其逻辑顺序依次存储在一段连续的存储区域中。
1.1.2.2 顺序表的应用——多项式的表示和运算
多项式可以用顺序表来表示,其中每个元素表示一个项,包含系数和指数。
1.2 链表
1.2.1 链表的基本概念
链表是一种常见的数据结构,它由多个结点组成,每个结点包含数据和指向下一个结点的指针。
1.2.2 链表的基本操作
1.2.2.1 插入操作
在链表中插入一个元素,需要先找到插入位置的前一个结点,然后将新结点插入到其后面。
1.2.2.2 删除操作
在链表中删除一个元素,需要先找到要删除的结点的前一个结点,然后将其后面的结点删除。
1.2.2.3 查找操作
在链表中查找一个元素,需要遍历整个链表,找到与要查找元素相等的结点。
1.2.2.4 修改操作
在链表中修改一个元素,需要先查找到该结点,然后将其数据修改为新的元素。
1.2.3 链表的应用
1.2.3.1 单链表的应用——约瑟夫问题
约瑟夫问题是一个经典的数学问题,可以用单链表来解决。
1.2.3.2 双向链表的应用——LRU缓存算法
LRU缓存算法是一种常见的缓存淘汰策略,可以用双向链表来实现。
二、栈与队列
2.1 栈
2.1.1 栈的基本概念
栈是一种特殊的线性表,它只能在栈顶进行插入和删除操作。
2.1.2 栈的基本操作
2.1.2.1 入栈操作
在栈中插入一个元素,需要将其放到栈顶位置。
2.1.2.2 出栈操作
在栈中删除一个元素,需要将栈顶元素删除。
2.1.2.3 查看栈顶元素
可以查看栈顶元素,但不会将其删除。
2.1.2.4 判断栈是否为空
可以判断栈是否为空。
2.1.3 栈的应用
2.1.3.1 栈的应用——括号匹配问题
括号匹配问题是一种常见的算法问题,可以用栈来解决。
2.1.3.2 栈的应用——中缀表达式转后缀表达式
中缀表达式是人们常用的表达式形式,但是计算机无法直接计算,需要将其转换为后缀表达式。
2.2 队列
2.2.1 队列的基本概念
队列是一种特殊的线性表,它只能在队尾插入元素,在队头删除元素。
2.2.2 队列的基本操作
2.2.2.1 入队操作
在队列中插入一个元素,需要将其放到队尾位置。
2.2.2.2 出队操作
在队列中删除一个元素,需要将队头元素删除。
2.2.2.3 查看队头元素
可以查看队头元素,但不会将其删除。
2.2.2.4 判断队列是否为空
可以判断队列是否为空。
2.2.3 队列的应用
2.2.3.1 队列的应用——广度优先搜索
广度优先搜索是一种常见的图算法,可以用队列来实现。
2.2.3.2 队列的应用——队列的值
可以用队列来实现求队列的值。