
数据结构
Joker Zxc
这个世界是属于偏执狂的。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构——动态顺序表
线性表: 动态顺序表的实现: #define MAXSIZE 100 typedef int SLDateType; typedef struct SeqList { SLDateType* array; //动态数组 int size; //有效元素的个数 int capacity; //容量 }SeqList; 功能实现: 初始化、破坏: //功能实现 //初始化 ...原创 2019-07-15 23:59:58 · 241 阅读 · 0 评论 -
数据结构——链表
链表: 定义: typedef int SListDataType; typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址 } SListNode; typedef struct SHead { //头结点 SListNode* ...原创 2019-07-17 09:41:12 · 168 阅读 · 0 评论 -
链表:删除所有值是date的结点
删除所有值是date的结点: 思路:找到所有date的值(即按值查找),类似头删一样删除值是date的结点,注意,第一个结点值是date时,头节点得变化;最后一个结点值是date时尾结点得变化(即头删,尾删)。 //删除节点的所有date值 int DeleteAllDate(SHead* s,SListDataType date) { //边界判断 //1.链表不存在 assert(...原创 2019-07-17 09:46:09 · 350 阅读 · 0 评论 -
链表——反转链表
反转链表: 代码示例: 我链表的定义: typedef int SListDataType; typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址 } SListNode; typedef struct SHead { SListNode* ...原创 2019-07-17 10:46:02 · 215 阅读 · 0 评论 -
链表:返回链表的中间结点
返回链表的中间结点: 代码实现: 链表的定义: typedef int SListDataType; typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址 } SListNode; typedef struct SHead { SListNo...原创 2019-07-17 11:35:10 · 324 阅读 · 0 评论 -
链表:链表分割问题:以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
链表分割: 以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前,注意:数据的顺序不改变。 代码实现: 链表的定义: typedef int SListDataType; typedef struct SListNode { SListDataType value; // 保存的值 struct SListNode* next; // 保存下一个结点的...原创 2019-07-17 17:28:01 · 2689 阅读 · 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 · 188 阅读 · 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 · 179 阅读 · 0 评论 -
排序算法之—希尔排序
希尔排序: 图解: 第一步: 第二步: 第三、四步: 第五步: 重点1,2步的原理。后面一样的我道理。 实现代码: //希尔排序 void Hill(int a[], int length, int grep) { //三个参数:存放数据的数组,数据长度,间隔 //数据长度的确定可以: //int length = sizeof(array) / ...原创 2019-07-22 11:43:45 · 194 阅读 · 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 · 209 阅读 · 0 评论 -
排序算法之—堆排序
堆排序: 堆排序算法流程图:(图解) 这是我们已知的大堆 下面是实现流程: 代码实现: //5.堆排序 void Heap(int a[], int length) { //两个参数:存放数据的数组,数据长度 //1.建大堆 CreatHeap(); //这里没有写 后面再写 //2.开始排序 for (int i = 0; i < lengt...原创 2019-07-22 22:46:29 · 370 阅读 · 0 评论 -
排序算法之—快速排序
快速排序: 图解大体思想: 可以看到,最后的数据中:绿色都是小于等于6的数据;蓝色就是大于6 的数据;接着分别对绿色,蓝色部分进行同样的方式,最终就会排序完成。 确定快速排序的流程: 划分区间的方法: Hover方法 图解思想: Hover版本的代码: //Hover法 int Hover(int array[], int right, int left) { ...原创 2019-07-23 11:25:06 · 244 阅读 · 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 · 475 阅读 · 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 · 317 阅读 · 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 · 209 阅读 · 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 · 226 阅读 · 0 评论 -
数据结构——栈(动态数组实现)
栈: 代码实现: 栈的定义: //定义 typedef int StackDataType; //因为是动态数组 typedef struct Stack { StackDataType* array; StackDataType size; //容量 //有效元素个数 StackDataType top; //栈顶 //因为栈顶经常改变所以要特定的指定栈顶 }Stack; ...原创 2019-07-18 23:04:40 · 400 阅读 · 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 · 174 阅读 · 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 · 393 阅读 · 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 · 695 阅读 · 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 · 210 阅读 · 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 · 943 阅读 · 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 · 5992 阅读 · 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 · 2527 阅读 · 0 评论 -
面试题:栈——括号匹配
栈的应用:括号匹配 原题链接:https://leetcode-cn.com/problems/valid-parentheses/ 括号匹配: 依次遍历字符串中的每一个字符 如果是左括号 压栈 如果是右括号 判断当前栈是否为空栈 右括号多于左括号 return false 取出栈顶括号(左括号) 拿左括号和右括号进行匹配 如果不匹配 return...原创 2019-04-26 12:10:09 · 356 阅读 · 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 · 177 阅读 · 0 评论 -
七大排序-------直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、 归并排序
(博客中有每个分开的详细讲解~~~) 排序算法: 插入排序 直接插入排序 希尔排序 选择排序 选择排序 堆排序 交换排序 冒泡排序 快速排序 归并排序 归并排序 插入排序: 打扑克 //直接插排 ¥ //时间复杂度---O(n^2) ...原创 2019-04-23 22:13:32 · 508 阅读 · 0 评论