数据结构
lizhentao0707
这个作者很懒,什么都没留下…
展开
-
逻辑结构与存储结构
逻辑上的数据结构反映成分数据之间的逻辑关系即逻辑结构 ,而物理上的数据结构反映成分数据在计算机内部的存储安排即存储结构 。常见的逻辑结构有:线性结构,非线性结构(集合结构,树状结构,网络结构)。(1) 线性结构 :数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。eg:线性表,栈,队列,双队列,数组,串。(2) 非线性结构:其逻辑特征是一个节点元素可能对应多个直接前驱和多个...原创 2018-04-11 23:42:01 · 1752 阅读 · 0 评论 -
LeetCode——区间合并
区间合并给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视...原创 2018-09-23 22:25:15 · 548 阅读 · 0 评论 -
马走日——最小步数
马走日——最小步数题目描述 一匹马在一个8*8的棋盘上走着,它的每一步恰好走成一个日字,也就是在x、y两个方向上,如果在一个方向走一步,另一个方向就走两步。假设棋盘的下标左下角是(1,1),右上角是(8,8)。给你马的最初位置p1(a1,b1),最终位置p2(a2,b2),请你编程求出马从最初位置到最终位置所走的最少步数。#include<iostream&g...原创 2018-09-23 22:03:35 · 3100 阅读 · 0 评论 -
拼凑钱币-动态规划
拼凑钱币 给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。 coins = {1, 5, 10, 20, 50, 100}; 假设dp[i][j]表示前i种纸币构成值为j的所有组合总数,则对于第i种纸币来说,有三种种情况:(1) 当 coin...原创 2018-09-05 10:39:22 · 1692 阅读 · 1 评论 -
动态规划-01背包
动态规划01背包题目描述 现有编号分别为1 2 3 4 5的五件物品,它们的重量分别是2 2 6 5 4,价值分别是6 3 5 6 4,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?物品重量w[] = {2, 2, 6, 5, 4}; 物品价值v[] = {6, 3, 5, 6, 4}; 背包容量为c;假设opt[i][j]表示前i件物品放入...原创 2018-09-04 18:26:16 · 235 阅读 · 0 评论 -
单链表的创建、添加、删除+判断是否有环、环的长度、环入口
单链表 单链表是数据节点是单向排列。包括两个域:数据域和指针域。单链表的节点数据结构如下:// 单链表节点数据结构class listNode{public: int value; // 数据域 listNode *next; // 指针域}; 通常用“头指针”来标识一个单链表,头指针是指向单链表第一个节点的指针,如图1所示表...原创 2018-07-28 23:10:01 · 847 阅读 · 1 评论 -
求二叉树的深度/求二叉树的节点数
1 求二叉树的深度/高度思路:递归解法:1 如果二叉树为空,则树的深度为0;(递归返回条件)2 如果二叉树不为空,二叉树深度 =max{左子树节点个数+右子树节点的个数+1};代码如下:// 二叉树节点的数据结构class treeNode{public: int value; treeNode *left; treeNode *right;};// 求二叉树的深度/高度...原创 2018-07-05 15:51:56 · 5431 阅读 · 0 评论 -
归并排序
归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。基本思路:先递归的把数组划分为两个子数组,一直递归到数组中只有一个元素,然后再调用函数把两个子数组排好序,因为该函数在递归...原创 2018-07-17 16:12:18 · 146 阅读 · 0 评论 -
堆排序和优先级队列priority_queue
堆 堆是完全二叉树,便于用array来储存堆的所有节点;堆存储在下标为0开始计数的数组中,因此在堆中给定下标为i的结点时: ① 如果i=0: 结点i是根节点,没有双亲节点;否则结点i的双亲结点为结点(i-1)/2。 ② 如果2*i+1>n-1: 则结点i无左孩子,否则结点i的左孩子为结点2*i+1。 ③ 如果2*i+2>...原创 2018-07-03 12:58:48 · 842 阅读 · 0 评论 -
创建二叉树(递归+先序遍历)
创建二叉树(递归+先序遍历)(1) 自输入数据元素,形参为引用类型或二级指针class treeNode{public: int value; treeNode *left; treeNode *right;};// 递归+先序遍历创建二叉树void createBinaryTree(treeNode *&root) // 形参必须声明为引用类型或二级指针{ ...原创 2018-06-20 14:41:58 · 2050 阅读 · 0 评论 -
使用两个队列实现一个栈
原文链接:https://blog.csdn.net/jiange_zh/article/details/50583370队列是先进先出,而栈是先进后出;考虑到我们取栈顶元素的便利性,我们在实现时使得栈顶等于队列头;由于栈的pop弹出栈顶元素,而队列的pop也是弹出栈顶元素,所以我们需要特别处理的是插入操作。由于往栈中添加元素相当于往队列头添加元素,因此我们需要在两个队列中进行元素的转移,比较简单...转载 2018-05-30 10:18:09 · 89 阅读 · 0 评论 -
交换排序(冒泡排序和快速排序)
交换排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。冒泡排序的基本思想:假设待排序元素表长为size,从前往后(或从后往前)两两比较相邻元素的值,若为逆序(即arr[j]>arr[j+1]),则交换他们,直至整个元素表有序。// 冒泡排序(升序 从前往后)(下沉)每趟排序确定一个相对最大的数,放在右边void bubbleSort(int *arr,...原创 2018-06-04 22:56:33 · 670 阅读 · 0 评论 -
插入排序(直接插入排序和希尔排序)
直接插入排序指的是把未排序的元素一个一个的插入到有序的序列中,直至所有元素插入完成。适用于处理数据量较少或部分有序的数据。// 升序void insertSort(int *arr, int size){ for (int i = 1; i < size; i++) { if (arr[i] < arr[i - 1]) { int inserted =...原创 2018-06-04 19:52:20 · 650 阅读 · 1 评论 -
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。int binarySearch(int *arr, int size, int target){ int low = 0; int high = size - 1; int mid; while (low <= ...原创 2018-04-19 09:47:04 · 144 阅读 · 0 评论