随笔分类 - Data_Structure
数据结构笔记(STL与手写都有)
摘要:
1 // 并查集的初始化 2 3 //一开始有n个元素,互相独立,则构成了n个集合,每个集合的代表元素就是它本身 4 5 const int maxn = 100010; 6 7 int fa[maxn + 1]; //fa数组记录每个元素由谁代表 8 int sz[maxn + 1]; //sz数
阅读全文

摘要:
1 // 用数组实现a -> z的字典树 2 //注:若next报错则用nxt等其他变量名 3 const int maxn = 100010; 4 const int charsize = 26; //字符集大小 5 6 //记录此节点的子节点编号(默认全是小写字母) 7 int next[max
阅读全文

摘要:
下面我们来介绍一般意义上的树, 包括有根树 和 无根树; 有根树基本操作: vector实现: 1 const int N = 100001; 2 3 VI edges[N + 1]; 4 //数组里面的每一个元素都是一个vector,就是用vector来存树,当然也可以用链表来存 5 //edge
阅读全文

摘要:
众所周知,堆是一种很好用的数据结构,是基于完全二叉树的。 1 //堆的数组实现 2 const int Maxsize = 10000; 3 int len = 0; //记录当前size 4 int heap[Maxsize+1]; 5 6 //当然也可以用vector实现 7 vector <i
阅读全文

摘要:
给出一些二叉树的入门级(确信)使用方法: 1 //用递归的方式建立一个完全二叉树 2 void Bulid(int t){ 3 UpdateData(t); //添加数据 4 Build(t + t); //如果子节点存在 5 Build(t + t + 1); 6 //用这种方法建立非完全二叉树
阅读全文

摘要:
这里直接以插入排序和归并排序的代码来介绍单向链表: 1 //结构体实现链表 插入排序 2 struct Node{ 3 int value; 4 Node *next; 5 //Node *prev; //双向链表 6 Node *head = NULL; //NULL表示一个空节点,实际上是一个定
阅读全文

摘要:
类似地,鉴于STL的队列有或多或少的功能缺失,于是我们就来手写一个队列。 以下是代码,功能有待完善。 1 //数组实现队列的简单操作 2 int q[100001]; 3 int front = 1,rear = 0; 4 5 void Push(int x){ 6 q[++rear] = x; 7
阅读全文

摘要:
鉴于STL的栈有或多或少的功能缺失,于是我们就来手写一个栈。 以下是代码,功能有待完善。 1 //栈的简单操作 数组实现 2 int s[100001]; //创建栈 3 int top = 0; //创建头指针,一开始在底部 4 5 void Push(int x){ 6 s[++top] = x
阅读全文
