![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Joker Zxc
这个世界是属于偏执狂的。
展开
-
数据结构——动态顺序表
线性表:动态顺序表的实现:#define MAXSIZE 100typedef int SLDateType;typedef struct SeqList { SLDateType* array; //动态数组 int size; //有效元素的个数 int capacity; //容量}SeqList;功能实现:初始化、破坏://功能实现//初始化...原创 2019-07-15 23:59:58 · 195 阅读 · 0 评论 -
数据结构——链表
链表:定义:typedef int SListDataType;typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址} SListNode;typedef struct SHead { //头结点 SListNode* ...原创 2019-07-17 09:41:12 · 140 阅读 · 0 评论 -
链表:删除所有值是date的结点
删除所有值是date的结点:思路:找到所有date的值(即按值查找),类似头删一样删除值是date的结点,注意,第一个结点值是date时,头节点得变化;最后一个结点值是date时尾结点得变化(即头删,尾删)。//删除节点的所有date值int DeleteAllDate(SHead* s,SListDataType date) { //边界判断 //1.链表不存在 assert(...原创 2019-07-17 09:46:09 · 292 阅读 · 0 评论 -
链表——反转链表
反转链表:代码示例:我链表的定义:typedef int SListDataType;typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址} SListNode;typedef struct SHead { SListNode* ...原创 2019-07-17 10:46:02 · 178 阅读 · 0 评论 -
链表:返回链表的中间结点
返回链表的中间结点:代码实现:链表的定义:typedef int SListDataType;typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址} SListNode;typedef struct SHead { SListNo...原创 2019-07-17 11:35:10 · 273 阅读 · 0 评论 -
链表:链表分割问题:以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
链表分割:以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前,注意:数据的顺序不改变。代码实现:链表的定义:typedef int SListDataType;typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的...原创 2019-07-17 17:28:01 · 2531 阅读 · 4 评论 -
排序算法之—冒泡排序
冒泡排序:实现代码://冒泡排序void bubbling(int a[],int length) { //a:装数据的数组 length:数据的长度 int i = 0; for (i = 1; i < length; i++) { //length是数据长度 //数据要变换多少趟 int j = 0; for (j = 0; j < length ...原创 2019-07-22 11:00:33 · 153 阅读 · 0 评论 -
排序算法之—插入排序
插入排序:代码实现://插入排序//插入数据void Inister(int a[], int length) { //a:装数据的数组 length:数据的长度 int i = 0; for (i = 1; i < length;i++) { //第二个数据开始,因为第一个数据不需要找位置 int j = 0; int k = a[i]; //给数据k找位...原创 2019-07-22 11:02:41 · 147 阅读 · 0 评论 -
排序算法之—希尔排序
希尔排序:图解:第一步:第二步:第三、四步:第五步:重点1,2步的原理。后面一样的我道理。实现代码://希尔排序void Hill(int a[], int length, int grep) { //三个参数:存放数据的数组,数据长度,间隔 //数据长度的确定可以: //int length = sizeof(array) / ...原创 2019-07-22 11:43:45 · 163 阅读 · 0 评论 -
排序算法之—直接选择排序
直接选择排序:图解:主要步骤:我们就可以确定:两层循环,第一层循环代表正在调整顺序的位置,第二层代表无序的元素实现代码://4.直接选择排序int choose(int a[], int length) { int i = 0; for (i = 0; i < length; i++) { //确定调整色位置 int j = 0; int mi...原创 2019-07-22 12:22:39 · 167 阅读 · 0 评论 -
排序算法之—堆排序
堆排序:堆排序算法流程图:(图解)这是我们已知的大堆下面是实现流程:代码实现://5.堆排序void Heap(int a[], int length) { //两个参数:存放数据的数组,数据长度 //1.建大堆 CreatHeap(); //这里没有写 后面再写 //2.开始排序 for (int i = 0; i < lengt...原创 2019-07-22 22:46:29 · 321 阅读 · 0 评论 -
排序算法之—快速排序
快速排序:图解大体思想:可以看到,最后的数据中:绿色都是小于等于6的数据;蓝色就是大于6 的数据;接着分别对绿色,蓝色部分进行同样的方式,最终就会排序完成。确定快速排序的流程:划分区间的方法:Hover方法图解思想:Hover版本的代码://Hover法int Hover(int array[], int right, int left) { ...原创 2019-07-23 11:25:06 · 205 阅读 · 0 评论 -
面试题:设计循环队列
原题链接:https://leetcode-cn.com/problems/design-circular-queue/代码如下://设计循环队列class MyCircularQueue {public: int *array; int capacity; int size; int front; // 队首下标 int rear; // 队尾下标 /*在这里初始化...原创 2019-04-26 12:24:09 · 430 阅读 · 0 评论 -
面试题:实现一个最小栈
原题链接:https://leetcode-cn.com/problems/min-stack/代码如下:// 实现一个最小栈。class MinStack {public: stack<int> normal; stack<int> min; void push(int x) { normal.push(x); if (min.empty()...原创 2019-04-26 12:22:51 · 256 阅读 · 0 评论 -
面试题:用栈实现队列
原题链接:https://leetcode-cn.com/problems/implement-queue-using-stacks/代码如下://用栈实现队列。class MyQueue {public: stack<int> left; stack<int> right; /*将元素x推到队列的后面。*/ void push(int x) { ...原创 2019-04-26 12:21:41 · 172 阅读 · 0 评论 -
排序算法之—归并排序
归并排序:归并排序的代码://归并排序void __MergeSort(int array[], int left, int right, int* extra) { if (right == left + 1) { //剩余一个数,有序 return; } if (left >= right) { //区间没有数 return; } int ...原创 2019-07-23 16:05:59 · 185 阅读 · 0 评论 -
数据结构——栈(动态数组实现)
栈:代码实现:栈的定义://定义typedef int StackDataType;//因为是动态数组typedef struct Stack { StackDataType* array; StackDataType size; //容量 //有效元素个数 StackDataType top; //栈顶 //因为栈顶经常改变所以要特定的指定栈顶}Stack;...原创 2019-07-18 23:04:40 · 346 阅读 · 0 评论 -
数据结构——动态顺序表的基本操作
typedef int DataType; typedef struct SeqList { DataType* _array; // 保存顺序表中有效元素个数 int _capacity; // 空间总大小 int _size; // 有效元素个数 }SeqList, *PSeqList; void SeqListInit(PSeqList ps); void SeqL...原创 2019-04-15 18:01:26 · 134 阅读 · 0 评论 -
数据结构——二叉树的基本操作——创建、破坏、拷贝(复制)
结构体:typedef char BTDataType;typedef struct BTNode{ struct BTNode* pLeft; struct BTNode* pRight; BTDataType data;}BTNode;创建二叉树:BTNode* CreateBinTree(BTNode* array, int size){ BTDataTy...原创 2019-04-23 21:22:24 · 341 阅读 · 0 评论 -
数据结构——二叉树操作——查找,获取二叉树中节点的个数 (两种方式)、求二叉树的高度 、获取二叉数中叶子节点的个数 、获取二叉树第K层节点的个数
结构体:typedef char BTDataType;typedef struct BTNode{ struct BTNode* pLeft; struct BTNode* pRight; BTDataType data;}BTNode;查找:二叉树结点中所有的 value 都不重复找结点的 value 是 v 的结点如果找到了,返回 v 所在的结点地址如果没...原创 2019-04-24 09:05:46 · 526 阅读 · 0 评论 -
数据结构——二叉树——求二叉树的镜像 、判断是不是子树、检测二叉树是否平衡
结构体:typedef char BTDataType;typedef struct BTNode{ struct BTNode* pLeft; struct BTNode* pRight; BTDataType data;}BTNode;求二叉树的镜像:// 求二叉树的镜像 bool Mirror(BTNode* pRoot1,BTNode* pRoot2){...原创 2019-04-24 09:09:09 · 154 阅读 · 0 评论 -
数据结构——二叉树——前序、中序、后序(递归、非递归遍历)、层序(队列、数组实现)
结构体:typedef char BTDataType;typedef struct BTNode{ struct BTNode* pLeft; struct BTNode* pRight; BTDataType data;}BTNode;前序遍历(递归,非递归):void PreOrder(BTNode* pRoot) //前序{ if (pRoot...原创 2019-04-23 21:29:17 · 880 阅读 · 0 评论 -
数据结构——栈——初始化栈、入栈、出栈、获取栈顶元素、获取栈中有效元素个数、判空、销毁栈
栈的结构体:typedef int SDataType;typedef struct Stack{ SDataType* array; int capacity; int top; // 标记栈顶位置 }Stack;初始化栈 ://初始化栈void StackInit(Stack* ps){ ps->capacity = 0;}入栈://入栈...原创 2019-04-26 11:49:21 · 5893 阅读 · 0 评论 -
数据结构——队列——初始化队列 、入队列、出队列、获取队列头部元素 、获取队列队尾元素 、获取队列中有效元素个数 、判空、销毁队列
队列的结构体:typedef QNode* QDataType;// 链式结构:表示队列 typedef struct QNode{ struct QNode* pNext; QDataType data;}QNode;// 队列的结构 typedef struct Queue{ QNode *head; // 链表的第一个结点 QNode *last; //...原创 2019-04-26 12:04:14 · 2269 阅读 · 0 评论 -
面试题:栈——括号匹配
栈的应用:括号匹配原题链接:https://leetcode-cn.com/problems/valid-parentheses/括号匹配:依次遍历字符串中的每一个字符如果是左括号压栈如果是右括号判断当前栈是否为空栈右括号多于左括号 return false取出栈顶括号(左括号)拿左括号和右括号进行匹配如果不匹配 return...原创 2019-04-26 12:10:09 · 305 阅读 · 0 评论 -
面试题:用队列实现栈
原题链接:https://leetcode-cn.com/problems/implement-stack-using-queues/用队列实现栈代码如下://用队列实现栈class MyStack {public: queue<int> q; // 成员变量 /*将元素x推入堆栈。*/ void push(int x) { q.push(x); }...原创 2019-04-26 12:18:24 · 141 阅读 · 0 评论 -
七大排序-------直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、 归并排序
(博客中有每个分开的详细讲解~~~)排序算法: 插入排序 直接插入排序 希尔排序 选择排序 选择排序 堆排序 交换排序 冒泡排序 快速排序 归并排序 归并排序插入排序: 打扑克//直接插排 ¥//时间复杂度---O(n^2) ...原创 2019-04-23 22:13:32 · 436 阅读 · 0 评论