# 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,也可以提高代码的复用性,每个知识点所对应的介绍都在博客中: * 举个例子:
![](https://github.com/xiaobai1993/XBDataStructNote/raw/master/pic/introduction.png)
下面以线性表为例子
在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学习记录