数据结构
文章平均质量分 70
ustcyy91
这个作者很懒,什么都没留下…
展开
-
数据结构——链表
#include #include #include typedef struct Node{ int data; struct Node *next;}NODE,*PNODE; //定义结构体, NODE相当于 struct Node ,PNODE等价于 struct Node * PNODE create();void list(PNODE head);//遍历只需要一个原创 2017-06-24 17:53:17 · 178 阅读 · 0 评论 -
Stack的三种含义
Stack的三种含义作者: 阮一峰日期: 2013年11月29日学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分。含义一:数据结构stack的第一种含义是一组数据的存放方式,特点为LI转载 2017-06-28 00:08:13 · 494 阅读 · 0 评论 -
关于堆和栈
存储的结构就这几个,早就了然于胸。但是最近实际的操作中,忽然感觉又不是那么知道它了,索性在翻出来看看,又是一种体会。数据结构中的一般称“栈(stack)”,是一种后进先出的数据结构。它是一种概念,或者说是一种逻辑技术,与语言、平台无关。内存管理中的“堆栈”其实是分为堆(heap)和栈(stack)的。 以引用变量为例,引用变量本身存储在栈中,引用变量指转载 2017-06-28 01:47:54 · 295 阅读 · 0 评论 -
从上到下打印二叉树
从上往下打印二叉树2016-06-30 20:45:57问题:从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析:层序遍历直接想到的应该是基于队列实现。从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列头部取出最早进入队列的结点,重复前面的打印操作,直到队列中所有的结点都被打印出原创 2018-04-12 00:07:12 · 165 阅读 · 0 评论 -
二叉树的下一结点
链接:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e来源:牛客网思路:首先知道中序遍历的规则是:左根右,然后作图 结合图,我们可发现分成两大类:1、有右子树的,那么下个结点就是右子树最左边的点;(eg:D,B,E,A,C,G) 2、没有右子树的,也可以分成两类,a)是父转载 2018-04-12 10:47:16 · 106 阅读 · 0 评论 -
递归———整数划分问题
递归的核心是找到1.边界条件 边界条件是递归函数的出口2.递归方程 以斐波拉切数列为例边界条件是 f(0)=0 f(1)=1递归方程是 f(n)=f(n-1)+f(n-2) 整数划分问题的难点在于怎么找出递归方程?构造函数q(n,m) n代表目标数 m代表最大划分数根据n和m的关系,考虑以下几种情况: (1)当n=1时,不论m的值为多少(m>0),只有一种划分即{1}; (2...原创 2018-04-25 17:26:29 · 322 阅读 · 0 评论 -
动态规划------以最长递增子序列为例深入剖析动态规划
引言:剖析递推、搜索、贪心、动态规划的区别(部分摘自知乎)。先上结论一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的!每个阶段只有一个状态->递推;每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心(本质就是一阶马尔科夫模型);每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索;每个阶段的最优状态可以从之前某个阶段的某个...原创 2018-04-26 10:14:34 · 186 阅读 · 0 评论 -
写循环体的技巧-----循环不变式(loop invariant)
循环不变式是一种条件式(必须满足的条件,对循环而言是保持不变的,无论循环执行了多少次),循环语句没执行一次,就要求中间的结果必须符合不变式的要求。(1)进入循环语句时,不变式必须成立;(2)循环语句的循环体不能破坏不变式。也就是说,循环体开始循环时不变式成立,结束时也必须成立;(3)如果循环语句终止时不变式,依旧成立,那么至少说明,循环在保持循环不变式上没有犯错。 // (**) 不...原创 2018-05-19 16:58:52 · 2036 阅读 · 0 评论 -
今日头条2018.8.12笔试题总结
今日头条笔试题1(经典的floodfill问题):具体可以参考leetcode 200题:Number of Islands1. 一个球场C的球迷看台可容纳M*N个球迷。官方想统计一共有多少球迷群体,最大的球迷群体有多少人。球迷选座特性:1.1.同球迷群体会选择相邻座位,不同球迷群体选择不相邻的座位。(相邻包括前后相邻、左右相邻、斜对角相邻);2.给定一个M*N的二位球场,0...原创 2018-08-14 10:34:32 · 8182 阅读 · 0 评论 -
数据结构——构造最小生成树
给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.求最小生成树的算法(1) 克鲁斯卡尔算法图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.(2) 普里姆算法图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连通的顶点陆续转载 2017-06-27 20:06:04 · 439 阅读 · 0 评论 -
数据结构——BFS邻接表遍历
#include #include #include typedef struct node{ //定义结点结构 由数据域vertex和指针域next组成 int vertex; struct node *next; }NODE;typedef struct hnode{ //定义头结点结构 由数据域head和 指针域first组成 !!!注意 !!! 指针原创 2017-06-27 17:21:48 · 548 阅读 · 0 评论 -
数据结构——栈
#include #include #include typedef struct Node{ int data; struct Node *next;}NODE,*PNODE;typedef struct Stack{ PNODE top; PNODE bottom;}STACK,*PSTACK;void init(PSTACK ps);void push(PSTAC原创 2017-06-24 17:58:08 · 212 阅读 · 0 评论 -
数据结构——队列
#include #include #include typedef struct Queue{ //队列的结构 由头指针pBase(就像是个数组名,代表着数组的首地址)和front rear组成。 int *pBase; int front; int rear;}QUEUE ;void init(QUEUE *pQ); void add(QUEUE *pQ,int val原创 2017-06-26 00:52:01 · 208 阅读 · 0 评论 -
数据结构——图 ——边和顶点的确定
矩阵为5*5,则有五个顶点;关于主对角线对称,则为无向图;无向图中,边数目等于上/下三角矩阵中的非零元素数目。设图G的相邻矩阵如下图:则G的顶点数和边数分别为:0 1 1 1 11 0 1 0 01 1 0 1 11 0 1 0 11 0 1 1 0正确答案: D 你的答案: 空 (错误)4,5原创 2017-07-05 16:19:55 · 7817 阅读 · 0 评论 -
数据结构——哈夫曼树与编码
哈夫曼树的定义:#include #include typedef int ElemType; struct BTreeNode { ElemType data; struct BTreeNode* left; struct BTreeNode* right; }; //1、输出二叉树,可在前序遍历的基础上修改。采用广义表格式,原创 2017-06-26 16:04:40 · 673 阅读 · 0 评论 -
数据结构——树
一.基本概念:二:二叉树的遍历#include #include #include struct BiTree{ //二叉树的结构 由一个数据域和两个指针域组成 char data; struct BiTree *pl; struct BiTree *pr;};struct BiTree * create(); void prelist(s原创 2017-06-26 00:36:12 · 215 阅读 · 0 评论 -
数据结构——图 DFS遍历
#include int a[50][50]; //邻接矩阵 int b[50]; //校验数组 用来判断当前结点是否遍历过 int m,n,i,j,s=0; void dfs(int cur); //cur代表当前结点 int main(){ printf("请输入图的行m和列n的值:"); scanf("%d %d",&m,&n); printf("请输入邻接矩阵:");原创 2017-06-26 19:46:26 · 407 阅读 · 0 评论 -
数据结构——图的存储 邻接表
#include #include #include typedef struct node{ //定义结点结构 由数据域vertex和指针域next组成 int vertex; struct node *next; }NODE;typedef struct hnode{ //定义头结点结构 由数据域head和 指针域first组成 !!!注意 !!! 指针原创 2017-06-27 15:33:10 · 520 阅读 · 0 评论 -
数据结构——图的BFS的邻接矩阵遍历(BFS是由队列实现的)
#include#include#include typedef struct Queue{ //队列的结构 由头指针pBase(就像是个数组名,代表着数组的首地址)和front rear组成。 int *pBase; int front; int rear;}QUEUE ;void init(QUEUE *pQ); void add(QUEUE *pQ,int val)原创 2017-06-27 16:22:22 · 556 阅读 · 0 评论 -
Leetcode----------区间合并(数组)
最近在做今日头条的笔试题碰到了区间合并问题所以趁机把类似的问题总结一下LeetCode 56 给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1...原创 2018-08-14 16:21:00 · 6030 阅读 · 0 评论