数据结构
文章平均质量分 85
z_xiao_xue
这个作者很懒,什么都没留下…
展开
-
图
图是一种非线性数据结构,由顶点集合(vertex)和边的集合组成的一种数据结构。Graph=(V,W);V={x|x是顶点集合}; V是顶点的集合E={|x,y属于V}; E是边的集合图分为有向图和无向图1.有向图2.无向图 完全图在由n个顶点组成的无向图中,若有N(N-1)/2条边,则称为无向完全图。(也就是说任意原创 2016-12-04 00:26:33 · 377 阅读 · 0 评论 -
两种方法实现队列---顺序表和链表
队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列主要有push()(尾插),pop()(头删),size()(求队列大小),empty()(是否为空队列)几个基本的操作函数。顺序表实现队列:顺序表代码原创 2016-08-07 21:03:17 · 2100 阅读 · 5 评论 -
栈和队列面试题(四)
5.一个数组实现两个栈有两种方法:(1),数组单号下标为一个栈,双号下标为一个栈(2)开辟一个数组,从0号下标往右为1号栈,从N号下标网左为2号栈下面先来实现第一种方法:#include #include using namespace std;templateclass DoubleStack2{public: DoubleStack2() :_a原创 2016-08-24 15:23:38 · 569 阅读 · 1 评论 -
栈和队列面试题(一)
1.实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)。思想:创建两个栈,一个为正常栈S,一个为最小元素栈Minstack,按元素入栈顺序将第一个元素入S和Minstack栈,然后将元素依次入栈,入栈时,将每个元素与Minstack栈的栈顶元素进行比较,如果该元素小于Minstack栈栈顶元素,就把该元素也放进Minstck栈,出栈时,判断出栈元原创 2016-08-20 10:42:53 · 1574 阅读 · 0 评论 -
栈和队列面试题(二)
2.使用两个栈实现一个队列。思想:栈是先进后出的数据结构,队列是先进先出的数据结构,要用两个栈实现一个队列,就必须让两个栈实现元素的先进先出。入栈时,让需要入栈的元素全都进入S1栈中,出栈时,再把S1中的元素依次出栈,入S2栈,再把S2的栈顶元素弹出。如下图所示:当然,这个过程过于繁琐,有可以优化的方法如下图所示:代码实现://两个栈实现一个队列#include原创 2016-08-20 11:19:28 · 625 阅读 · 0 评论 -
栈和队列面试题(三)
4.元素出栈入栈的合法性,如入栈的序列(1,2,3,4,5),出栈的序列为(4,5,3,2,1).思想:先入栈一个元素,将出栈序列的第一个元素和该栈的栈顶元素比较,如果相同,那就让该元素出栈且出栈序列往后走一个,如果不相同,就按照入栈序列再把下一个元素入栈,再接着把栈顶元素和出栈元素进行比较,就这样循环比较,直到出栈序列为空,如果栈也为空,说明该出栈序列是合法的,否则就是不合法的。例如:入原创 2016-08-24 14:59:03 · 4120 阅读 · 0 评论 -
高度平衡的二叉搜索树-----AVL树
AVL树是高度平衡的二叉搜索树,它能保持二叉树的高度平衡,尽可能降低二叉树的高度,减少数的平均搜索长度AVL树的几个特点:1.左右子树高度绝对值不超过12.树的每左右子树都是AVL树3.每个节点的平衡因子是-1,0,1(平衡因子 = 右子树高度-左子树高度)一棵AVL树有N个节点,其高度可以保持在log2N,插入/删除/查找的复杂度也在log2N(log2N就是以2为底N的对数原创 2016-09-22 15:18:53 · 1184 阅读 · 0 评论 -
堆排序
堆数据结构是一种数组对象,是一棵完全二叉树,堆结构的二叉树存储结构是:最大堆:每个父节点数据都大于孩子节点 最小堆:每个父节点数据都小于孩子节点原创 2016-10-13 09:45:27 · 292 阅读 · 0 评论 -
广义表
广义表是非线性的结构,是线性表的一种扩展,是一个有限序列。广义表是一种递归定义的结构,表中又嵌套着表。eg: A = () B = (a,b) C = ((a,b),(c,d)) D = ((c),a,((e,f),d),b)广义表的结构定义:节点类型有三种:表头节点、值节点、子表节点还有指向下一个节点的指针enum Type原创 2016-10-26 22:40:52 · 482 阅读 · 0 评论 -
如何创建一个类只能在堆(栈)上建立对象
在C++中,类对象的建立方式有两种,一种是静态建立类对象,如A a;另一种是动态建立类对象,如A* p = new A;这两种方式是有区别的: 静态建立类对象:是指全局对象,静态对象,以及分配在栈区域内的对象,编译器对它们的内存分配是在编译阶段就完成的,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。原创 2016-11-08 15:13:00 · 2643 阅读 · 0 评论 -
小米面试题---朋友圈问题(并查集)
假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写出程序求出这n个人里一共有多少朋友圈。 例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友。则1,2,3属于一个朋友圈,4,5属于另一个朋友圈,结果为两个朋友圈。 这原创 2016-11-26 09:48:08 · 1638 阅读 · 0 评论 -
用两种方法实现栈---顺序表和链表
栈是一种先进后出的数据结构,栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。栈里面常用的函数有push()(增),pop()(删),size()(求大小),top()(顶部)和empty()(空原创 2016-08-06 11:37:06 · 1968 阅读 · 0 评论