一、数据结构大致包含以下几种存储结构:
- 线性表,还可细分为顺序表、链表、栈和队列;
- 树结构,包括普通树,二叉树,线索二叉树等;
- 图存储结构;
二、线性表
1、顺序表的数据结构:一段连续的物理内存空间,插入数据时,空间不足需要 realloc()
typedef struct Table{
int * head;
int length;
int size;
}table;
2、链表创建:可以有头结点,也可以不要头结点head。
基本操作,包括对链表中数据的添加、删除、查找(遍历)和更改。
typedef struct Link{
int elem;
struct Link *next;
}link;
3、静态链表:
typedef struct {
int data;//数据域
int cur;//游标,就是数组下标,表示直接后继元素所在数组中的位置
}component;
4、双向链表:单链表更适合 "从前往后" 找,而 "从后往前" 找并不是它的强项
typedef struct line{
struct line * prior; //指向直接前趋
int data;
struct line * next; //指向直接后继
}line;
三、栈(Stack)和队列(Queue)
1、顺序栈和链栈
2、顺序队列和链式队列
四、字符串
1、串的模式匹配算法:判断两个串之间是否具有"主串与子串"关系的算法。有以下两种:
普通的模式匹配算法 BF 算法
快速模式匹配算法 KMP 算法
五、数组和广义表
1、稀疏矩阵的压缩存储:
2、三元组顺序表:
//矩阵的结构表示
typedef struct {
triple data[number];//存储该矩阵中所有非0元素的三元组
int n,m,num;//n和m分别记录矩阵的行数和列数,num记录矩阵中所有的非0元素的个数
}TSMatrix;
3、广义表(必须是链式存储结构):广义表存储的形式 LS = {1,{1,2,3}},广义表 LS 存储了一个原子 1 和子表 {1,2,3}。
//方式一:
typedef struct GLNode{
int tag;//标志域
union{
char atom;//原子结点的值域
struct{
struct GLNode * hp,*tp;
}ptr;//子表结点的指针域,hp指向表头;tp指向表尾
};
}*Glist;
//方式二:
typedef struct GLNode{
int tag;//标志域
union{
int atom;//原子结点的值域
struct GLNode *hp;//子表结点的指针域,hp指向表头
};
struct GLNode * tp;//这里的tp相当于链表的next指针,用于指向下一个数据元素
}*Glist;
六、树
1、二叉树首先是有序树。分两种存储结构:
顺序存储:只有完全二叉树才能是顺序存储结构
链式存储:...
typedef struct BiTNode{
TElemType data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
struct BiTNode *parent;
}BiTNode,*BiTree;
2、回溯算法,也即“试探法”:走不通就回退再走的方法就是回溯法。
七、图(Graph)
1、数据之间的关系有 3 种:
"一对一":线性表;
"一对多" :树
"多对多":图
2、连通图:图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。
3、生成树:连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有多种不同的生成树与之对应。
4、普里姆算法(Prim算法)求最小生成树;
克鲁斯卡尔算法(Kruskal算法)求最小生成树
八、动态内存管理
九、查找算法
1、
十、排序算法
1、迭代器 :advance和distance的用法
vector<int>::iterator it = vec.begin();
vector<int>::iterator end = vec.end();
cout<<"The value of vector:";
for(;it != vec.end();it++)
cout<<*it<<" ";
cout<<endl;
//advance使用
it = vec.begin();
cout<<"After advance 3:";
advance(it,5);
cout << *it << " "<<endl;
//distance使用
cout<<"The distance of position 3 to the end:";
cout<<distance(it,end)<<endl;
2、