第1章 绪论
本章内容
本章主要介绍课程的框架、会使用到的C,C++的基本语法以及空间、时间复杂度的计算方法。
1.1 课程框架
全课程总共分为:线性表、栈与队列、字符串、矩阵、树与二叉树、图、排序和查找这些内容。
线性表为最基础内容,包括:顺序表的建立和相应的增删改查操作;链表的种类:单链表、双链表、循环单链表、循环双链表、链表的两种基本建立方法和相应的增删改查操作等等。
栈与队列:分为线性和链式两种,掌握它们实现栈和队列的方法。掌握栈的FILO和队列的FIFO的性质,会利用它们的性质完成典型的任务,例如字符串匹配。
字符串:了解字符串基本知识,KMP匹配算法
矩阵:数组,稀疏矩阵压缩
树与二叉树:树的存储方式、建立、节点与叶子数目的关系、性质、遍历方式、与森林的转化、二叉树的性质、建立、遍历方式、平衡二叉树的建立与插入删除、哈夫曼树与哈夫曼编码
图:图的存储方式、种类、变量算法、最小生成树、最短路径、关键路径、拓扑排序
排序:时间复杂度O(n)、稳定性、排序过程、交换类排序、选择类排序、插入类排序、归并排序、基数排序(桶排序)、外部排序
查找:顺序查找、二分查找、二叉树存储查找、散列查找、散列表(Hash Table)的建立以及解决冲突的几种方法
1.2 使用到的C、C++的编程基础
相信能够修数据结构的童鞋有一定的编程基础,这里就不说那些最基础的概念了,否则文档讲的就不是数据结构了。这里我们重点介绍一些数据结构常用的基础知识。
1.2.1 数据类型
基本类型:float、int、char等均属于此类
结构型:用户自己设计的数据类型,如利用struct实现。举个例子:
typedef struct Student {
int ID;
string name;
int age;
} Student;
这里面我们定义了一个新的类型叫做Student,这个类型里面包括一个int类型的ID、一个string类型的name和一个int类型的age。
指针型:是地址,指向对应类型的某一个变量的地址。举个例子:
int *p;
int number = 233333;
p = &number;//将number的地址赋值给p
这里面int指针类型的变量p,它指向了一个int类型变量number,就是说此时p所存放的就是number的地址。
1.2.2 *与&问题
相信很多童鞋都对C/C++中的指针非常讨厌,那么在这里我们简单介绍一下有关指针的基本操作,目的还是为了方便后面的内容。再举个例子:
#include <iostream>
using namespace std;
int main() {
int a = 233333;
int b;
int *p
//将a的地址赋值给p,此时p的内容就是a的地址了,&是取地址的意思
p = &a;
//获取p指向的地址存放的内容,*是根据地址获取内容,此时b的值就是p指向的地址中的内容
b = *p;