README.md 4.5 KB
Newer Older
wnma3mz's avatar
wnma3mz 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
## 数据结构

> 来源:[数据结构探险系列代码](https://www.imooc.com/u/1349694/courses?sort=publish)
>
> 贡献者:[wnma3mz](https://github.com/wnma3mz)
>
> 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。

- [ApacheCN 机器学习交流群 629470233](http://shang.qq.com/wpa/qunwpa?idkey=30e5f1123a79867570f665aa3a483ca404b1c3f77737bc01ec520ed5f078ddef)
- [ApacheCN 学习资源](http://www.apachecn.org/)

目前,只在课程基础上用C++实现了一遍,并加入了堆和平衡二叉树的实现。欢迎提交完善C++版本和其他语言版本。若有疑问,欢迎提issus。



## 说明

C++在Linux下编译

1. `g++ *.cpp -o outfile`
2. `./outfile`

### Stack/

栈的实现

| 名字             | 功能                                    |
| -------------- | ------------------------------------- |
| `MyStack.h`    | 实现了栈的数据结构,并且可拓展                       |
| `MyStack.cpp`  | 可以不需要编译,因为代码已经转移到了`MyStack.h`中,为了实现模板 |
| `Coordinate.h` | 实现坐标类,`m_iX``m_iY`                   |
| `demo.cpp`     | 检验栈的实现                                |
| `demo2.cpp`    | 引入新的`Coordinate.h`实现栈                 |
| `demo3.cpp`    | 实现进制转换                                |
| `demo4.cpp`    | 实现符号匹配`[(){}]`                        |

###  Queue/

队列的实现(环形队列)

| 名字           | 功能                                |
| ------------ | --------------------------------- |
| `MyQueue.h`  | 实现了队列的数据结构,编译的时候需要使用`MyQueue.cpp` |
| `Customer.h` | 实现顾客类,`m_strName``m_iAge`        |
| `demo.cpp`   | 检验队列的实现                           |
| `demo2.cpp`  | 引入`Customer.h`实现队列                |

### List/

**线性表**的实现(**顺序表****单向表**

| 名字             | 功能                                       |
| -------------- | ---------------------------------------- |
| `List.h`       | 实现**顺序表**                                |
| `List2.h`      | 实现**单链表**                                |
| `Node.h`       | 实现`List2.h`中需要的`Node`类,`Person`类和`Node`类的指针 |
| `Person.h`     | 使用`Person`类,有两个属性`name``phone`          |
| `Coordinate.h` | 实现坐标类,同`stack_demo/`                     |
| `demo.cpp`     | 检验**顺序表**的实现                             |
| `demo2.cpp`    | 引入`Coordinate.h`实现**顺序表**                |
| `demo3.cpp`    | 引入`Node.h`检验**单链表**的实现                   |
| `demo4.cpp`    | 引入`Person.h`实现**单链表**                    |


### Tree/

树的实现(二叉树数组和二叉树链表)

| 名字          | 功能                                       |
| ----------- | ---------------------------------------- |
| `Tree.h`    | 实现二叉树数组                                  |
| `Tree2.h`   | 实现二叉树链表                                  |
| `Node.h`    | 实现二叉树链表所需要的结点。`index`索引、`data`数值、`Node *pLChild, *pRChild, *pParent`左右孩子父结点 |
| `demo.cpp`  | 检验二叉树数组的实现                               |
| `demo2.cpp` | 检验二叉树链表的实现                               |
| `BSTree.h` | 实现二叉查找树                               |
| `demo3.cpp` | 检验二叉查找树的实现                               |
|`AVLTree.h`|平衡二叉树|

### Map/

图的实现

| 名字          | 功能                                       |
| ----------- | ---------------------------------------- |
| `CMap.h`    | 实现图                                      |
| `Edge.h`    | 实现图所需要的边,`nodeIndexA``nodeIndexB``weightValue`,节点A、B的索引及对应边的权值 |
| `Node.h`    | 实现图所需要的点,`m_cData`节点的值,`m_bIsVisted`改节点是否被访问过 |
| `demo.cpp`  | 检验图的实现,深度优先遍历和广度优先遍历                     |
| `demo2.cpp` | 检验最小生成树算法的实现,普利姆最小生成树和克鲁斯卡尔最小生成树         |
| `demo3.cpp` | 检验最短路径算法的实现,迪杰斯特拉最短路径和弗洛伊德最短路径         |

### Heap/

堆的实现

| 名字          | 功能                                       |
| ----------- | ---------------------------------------- |
| `Heap.cpp`    | 最小堆排序                                      |