# XBDataStructNote
**Repository Path**: xiaobai1993/XBDataStructNote
## Basic Information
- **Project Name**: XBDataStructNote
- **Description**: No description available
- **Primary Language**: C
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2017-11-16
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
XBDataStructNode
===
* 内容简介:
这是一个在学习数据结构和算法过程中的笔记,随着不断的学习里面的代码会不断地增加,会包含常用的数据结构和算法,以及笔试题,编程题目等等。
所使用的开发环境是`Mac系统+Xcode工具+C语言`。每个类型的数据结构都会专门放在相应的.c文件里面。这里面包含了这种数据结构包含的常用操作函数
的实现。并且在对每一种数据结构都有专门的 `XBxxxtest.C` 文件,这里面主要写了一些常用的操作进行测试。在测试的时候,只需要在main.c引入相应的
`XBxxxtest.h`文件并调用里面相关的测试函数就可以进行测试,非常方便。在以后学习新的数据结构类型的时候,都会尽量用工程已包含的数据结构实现,
可以找出自己编写的代码中的bug,也可以提高代码的复用性,每个知识点所对应的介绍都在博客中:
* 举个例子:

下面以线性表为例子
在XBListTest.c文件包含的函数的实现
```c
void testXBArrayList();//顺序存储的线性表的实现
void testXBLinkList();//链式存储的线性表
/**
* 包含操作 增删改查
*/
void testXBLinkList()
{
XBLinkNode LinkNode;
initXBLinkNode(& LinkNode);//初始化
//插入元素
printf("开始添加元素:\n");
for (int i = 0; i<10; i++) {
addItemToXBLinkNode(&LinkNode, (DATATYPE)(i+10));//添加元素
}
printXBLinkNodeData(LinkNode);
printf("查找元素12所在的位置 %d \n",findItemInXBLinkNode(LinkNode, 12));
printf("在索引为0的位置插入元素100:\n");
insertItemInXBLinkNode(&LinkNode, 0, 100);
printXBLinkNodeData(LinkNode);
printf("线性表当前的长度: %d \n",getLengthForXBLinkNode(LinkNode));
printf("删除索引为4的位置的元素:\n");
deleteItemInXBLinkNode(&LinkNode, 4);
printXBLinkNodeData(LinkNode);
int x ;
printf("获取2号位置的元素的值:\n");
getItemFromXBLinkNodeByIndex(LinkNode, 2, &x);
printf("%d \n",x);
printf("替换3号位置的元素为89:\n");
replaceXBLinkNodeatIdx(&LinkNode, 3, 89);
printXBLinkNodeData(LinkNode);
}
```
在XBLinkList.c和XBArrayList.c分别包含了链表实现和数组实现线性表的常用的操作函数的实现
```c
//常用的基本操作
void initXBArrayList(XBArrayList * ArrayList);
int isXBArrayListEmpty(XBArrayList * ArrayList);
int addItemToXBArrayList (XBArrayList * ArrayList,DATATYPE obj);
void clearXBArrayList(XBArrayList * ArrayList);
int getItemFromXBArrayListByIndex(XBArrayList ArrayList,int idx,DATATYPE * obj);
int findItemInXBArrayList(XBArrayList ArrayList,DATATYPE obj);
int insertItemInXBArrayList(XBArrayList *ArrayList,int idx,DATATYPE obj);
int deleteItemInXBArrayList(XBArrayList *ArrayList,int idx);
int getLengthForXBArrayList(XBArrayList ArrayList);
void printXBArrayListData(XBArrayList ArrayList);
int replaceXBArrayListatIdx(XBArrayList *ArrayList,int idx,DATATYPE obj);
```
在main.c里面直接调用了XBListTest.c文件的测试函数
```c
testXBArrayList();
testXBLinkList();
```
内容
===
* 线性表:
* 顺序存储
* 链式存储
* 链表的数组实现
* 栈,共享栈,链式栈
* 队列,循环队列
* 二叉树
* 前,中,后序访问,层次访问模式。
* 最小堆
* 线索二叉树,平衡二叉树,哈夫曼生成树,排序二叉树
* 双亲,兄弟,双亲兄弟,二叉链表的存储结构
* 图
* 深度优先,广度优先搜索
* 弗洛伊德,迪杰斯特拉,比尔曼(图的最短路径)
* 图的最小生成树(普利姆,克鲁斯卡尔算法)
* Swift学习记录