数据结构
Damn_Yang
天空电闪又雷鸣
展开
-
C语言实现顺序表的基本操作(增,删,查,改等等)
Seqlist.h #include<stdio.h> #include<assert.h> #include<string.h> #define MAX 100 typedef int DataType; typedef struct SeqList { DataType data[MAX];//数据 int sz;//记录数据的个数 }Se...原创 2018-10-31 16:35:32 · 575 阅读 · 0 评论 -
归并排序,各排序算法比较
归并排序是建立在归并操作山的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。 基本思想: 将待排序的元素序列分成两个长度相等的子序列,对每一个子序列排序,然后将他们合并成一个序列。合并两个子序列的过程称为二路合并。 归并排序的核心步骤: 分组 合并 代码实现: #include <stdio.h> #include <stdlib.h> #...原创 2019-01-19 16:20:22 · 392 阅读 · 0 评论 -
交换排序之冒泡排序和快速排序
交换排序 利用交换元素的位置进行排序的方法称作交换排序 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 常用的交换排序的方法:冒泡排序和快速排序 冒泡排序 冒泡排序原理:冒泡排序其实就是从头开始对整个数列里面的元素进行两两对比,比较大的元素放到后面,接着进行对比,直到最大的一个元素被提取出来放到整个数列的最后。接着再对剩下的元素进行相同的操作,直到整...原创 2019-01-18 17:33:54 · 1045 阅读 · 5 评论 -
二叉搜索树查找,插入,删除操作(递归与非递归)
二叉搜索树的概念 二叉搜索树又称二叉排序树,他或者是一颗空树,或者是具有以下性质的二叉树 若他的左子树不为空,则左子树上所有节点的值都小于根节点的值 若他的右子树不为空,则右子树上所有节点的值都小于根节点的值 他的左右子树也分别为二叉搜索树 二叉搜索树的操作 查找 插入 在二叉搜索树中插入新元素时,必须先检测该元素是否在树中已经存在。如果已经存在,则不进行插入;否则将新元素加入到...原创 2019-01-13 12:06:26 · 914 阅读 · 0 评论 -
选择排序之直接选择排序和堆排序
选择排序 基本思想:每一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 直接选择排序 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换 在剩余的array[i]--array[n-2](array[i+1]-...原创 2019-01-18 15:33:25 · 421 阅读 · 0 评论 -
插入排序之直接插入排序和希尔排序
插入排序: 基本思想: 每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止。 直接插入排序 当插入第i(i>=1)个元素时,前面的array[0],array[1],...,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],...的排序码顺序进行比较,找到插入位置...原创 2019-01-17 20:10:56 · 911 阅读 · 0 评论 -
哈希表的基本操作--拉链法
HashTableBucket.h #pragma once #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <time.h> //typedef char* HTBKeyType; //typedef c...原创 2019-01-17 14:26:08 · 831 阅读 · 0 评论 -
二叉树的相关面试题(一)
1.创建二叉树 在我写的另一派博客中:https://blog.csdn.net/Damn_Yang/article/details/84728761 2.前/中/后序遍历二叉树(递归与非递归) 前序(递归与非递归): //递归 void BinaryTreePrevOrder(BTNode* root) { if (root == NULL) { return; } pri...原创 2018-12-03 22:49:30 · 307 阅读 · 0 评论 -
创建一颗二叉树,二叉树的前序遍历,中序遍历,后序遍历,层序遍历。
二叉树的有些操作是需要借助栈和队列完成的。 栈和队列的基本操作在链接中的博客中https://blog.csdn.net/Damn_Yang/article/details/83928852 下面就是代码的实现部分了 BinaryTree.h #pragma once #include <stdio.h> #include <malloc.h> #include ...原创 2018-12-02 22:14:33 · 692 阅读 · 0 评论 -
堆的概念,创建,插入,删除以及堆排序
堆的概念 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: Ki <= K2*i+1 且 Ki<= K2*i+2 (Ki >= K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…,则称为小堆(或大堆)。 小堆(大堆)中:任一结点的关键码均小于(大于)等于它的左右...原创 2018-12-04 21:08:27 · 222 阅读 · 0 评论 -
栈和队列——迷宫问题求最短路径
迷宫问题最主要用的就是回溯法,首先我们来了解一下回溯法的概念 回溯法:对一个包括有很多结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(后退)到该节点的前一个结点,继续搜索该结点外的其他尚未搜索的分支;如果发现该结点无法再搜索下去,就让搜索过程回溯到这个结点的前一结点继续这样的搜索过程;这样的搜索过程一直进行到...原创 2018-11-21 14:06:06 · 120238 阅读 · 1 评论 -
栈和队列面试题
栈和队列实现的代码在链接中的博客中https://blog.csdn.net/Damn_Yang/article/details/83928852 1.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1) 思路:我们借助两个栈来进行操作(stack1和stack2) 入栈时:stack1正常入栈,如果stack2为空或者sta...原创 2018-11-16 17:10:03 · 309 阅读 · 0 评论 -
两个栈实现一个队列 两个队列实现一个栈
栈和队列实现的代码在链接中的博客https://blog.csdn.net/Damn_Yang/article/details/83928852 两个栈实现一个队列 思路: 入队时,直接压入stack1中 出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素倒入stack2中,否则直接弹出stack2中的元素 代码...原创 2018-11-15 16:42:46 · 289 阅读 · 0 评论 -
链表相关面试题
链表的基本操作在链接的博客中已经有实现https://blog.csdn.net/Damn_Yang/article/details/83689944 下面我们来看看链表相关的面试题,非常重要 下面的题目都会一个一个实现 #include<stdio.h> typedef int DataType; typedef struct Node { DataType data; ...原创 2018-11-08 19:58:41 · 485 阅读 · 1 评论 -
C语言实现栈和队列(栈和队列的基本操作)
栈: 栈:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。 特点:先进后出 stack.h #pragma once #include <stdio.h> #include <malloc.h> #include <assert.h> #include <...原创 2018-11-10 13:46:21 · 117798 阅读 · 0 评论 -
C语言实现链表的基本操作(增,删,查,改等等)
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。 每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 LinkList.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ ...原创 2018-11-03 19:38:23 · 110140 阅读 · 0 评论 -
哈希表的基础操作--开放定址法
HashTable.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <time.h> typedef int HTKeyType; typedef char HTValueType; //枚举哈希表中每一个数据的三种状态 ty...原创 2019-01-16 16:37:05 · 690 阅读 · 0 评论