数据结构
michellechouu
这个作者很懒,什么都没留下…
展开
-
【数据结构】单链表的建立,测长,打印,删除,插入, 排序, 逆置
conio.h不是C标准库中的头文件,是console input/o原创 2014-05-28 19:01:05 · 660 阅读 · 0 评论 -
【Java】设计数据结构SetOfStacks, 由多个栈组成,并且在前一个栈填满时新建一个栈(未完)
设想有一堆盘子,堆太高可能会倒下来。因此,现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请事先设计数据结构SetOfStacks, 模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push() 和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一原创 2015-07-10 14:52:27 · 879 阅读 · 0 评论 -
【Java】设计一个栈,并且push,pop和min三个方法的时间复杂度必须为O(1)
设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值。push,pop和min三个方法的时间复杂度必须为O(1)要保证min的时间复杂度为O(1), 那就不能每次通过遍历整个栈来获取最小值。假设这个栈初始为5:5; 最小值为5; 压入7,栈变为7,5;最小值为5; 压入3,栈变为3,7,5; 最小值为3这时弹出3,栈变为7,5; 最小值为原创 2015-07-10 13:29:41 · 3503 阅读 · 0 评论 -
【Java】用两个栈实现一个队列Myqueue类
栈的特性是先进后出,队列的特性是先进先出用两个栈实现一个队列的remove(),就是要把第一个栈的元素反转压入第二个栈,再依次弹出即可队列添加元素add()要添加在第一个栈里import java.util.Stack;public class MyQueue { Stack stackNewest, stackOldest; public MyQueue() { stac原创 2015-07-13 10:26:48 · 1339 阅读 · 0 评论 -
【Java】按升序对栈进行排序
编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构(如数组)。该栈支持如下操作:push, pop, peek,和isEmpty如果可以支持两个栈,我们可以每一次遍历栈1,将最小的元素放入栈2,把栈3作为搜索时的缓冲区但是这里只能使用一个额外栈,那是不是就没有办法了呢?不是的我们不需要反复搜索栈1来依次获得最小值原创 2015-07-13 10:32:50 · 3769 阅读 · 0 评论 -
【数据结构】深度优先搜索BFS和广度优先搜索DFS
深度优先是访问结点r,循环访问r的每个相邻结点。在访问r的相邻结点n时,我们会继续访问r的其他相邻结点前,先访问n的所有相邻结点。也就是说,在继续搜索r的其他子结点之前,我们会先穷尽搜索n的子结点伪代码void DFS_Search(Node root)广度优先BFS,我们会在搜索r的孙子结点之前先访问r的相邻结点,用队列迭代实现的方案伪代码void BFS_Search原创 2015-07-13 17:38:57 · 718 阅读 · 0 评论 -
【Java】检查二叉树是否平衡。
实现一个函数,检查二叉树是否平衡。二叉树平衡的定义如下:任意一个结点,其两颗子树的高度差不超过1递归访问每个整棵树,计算每个结点子树的高度public class BTreeBalanced { static class TreeNode { int data; static TreeNode left; static TreeNode right; } public原创 2015-07-14 10:10:26 · 3314 阅读 · 1 评论 -
【Java】位运算的其他问题
1. 给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数(一个略大,一个略小)2. 解释代码 n & ( n - 1) == 0是什么意思? 说明n是2的次幂3. 编写函数,确定需要改变几个位,才能将整数A转成整数Bpublic class bitSwap { public static int bitSwapReq(int a, int b) { int原创 2015-07-14 22:51:50 · 473 阅读 · 0 评论 -
【Java】给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树二叉查找树是,对于任意一个结点,左边的结点均小于它,右边的结点均大于它要创建一个高度最小的树,就必须让左右子结点的数量越接近越好,也就是说,要让中间值成为根节点,这样,左边的一半是左子树,右边的一半是右子树然后,继续以类似的方式构造整棵树,数据每一段的中间值成为根元素,左边一半成为左子树,右边一原创 2015-07-14 15:08:20 · 2472 阅读 · 0 评论 -
【Java】给定有向图,设计一个算法,找出两个结点之间是否存在一条路径
给定有向图,设计一个算法,找出两个结点之间是否存在一条路径通过图的遍历,比如深度优先或者广度优先搜索等,就能解决这个问题从结点的其中一个出发,在遍历过程中,检查是否找到另一个结点即可在遍历过程中,访问过的结点都应被标记为“已访问”,以避免重复访问深度优先实现起来比较简单,递归即可但广度优先很适合用来找最短路径,深度优先在访问临近结点之前需要先深度遍历其中一个临近结点impo原创 2015-07-14 14:01:53 · 3573 阅读 · 1 评论 -
【数据结构】位运算
x & (~0 还有一些:(0s,1s表示一串0和一串1)x ^ 0s = xx ^ 1s = ~xx ^ x = 0x & 0s = 0x & 1s = xx & x = xx | 0s = xx | 1s = 1x | x = x常见的位操作:获取,设置, 清楚以及更新位数据1. 获取某一位是1还是0:将1左移i位,得到形如原创 2015-07-14 16:28:55 · 499 阅读 · 0 评论 -
【Java】给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束。
给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束。假定从 j 到 i 位足以容纳M,也即若M = 10011, 那么 j 和 i 之间至少可容纳5个位。 例如, 不可能出现 j = 3 和 i = 2的情况,因为第3位和第2位之间放不下M。示例:输入: N = 10000000000, M = 10011, i原创 2015-07-14 17:02:38 · 1671 阅读 · 0 评论 -
【Java】给定一个有环链表,实现算法返回环路的开头结点
假设链表有一部分是环路,一部分不是,环路起始处距离链表表头有K个结点1. 创建两个指针:FastRunner 和 SlowRunnerpublic class FindLoopBegining { public LinkedListNode FindBeginging(LinkedListNode head){ LinkedListNode slow = head; LinkedLi原创 2015-07-09 15:34:57 · 1763 阅读 · 0 评论 -
【Java】对两个用链表表示的整数求和
给定两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。 public LinkedList addLists(LinkedList l1, LinkedList l2, int carry){ if (null == l1 && null == l2 && 0 == carry) return null原创 2015-07-09 10:05:23 · 5574 阅读 · 0 评论 -
【Java】编写函数,检查链表是否为回文
快行指针找到链表中间结点1. 反转前半部分看是否和后半部分一样2. 将前半部分入栈,迭代访问剩下的一半结点,每次的栈顶元素一样则是回文链表import java.util.Stack;public class isHuiWen { public boolean isPalinddrome(LinkedListNode head) { LinkedListNode f原创 2015-07-09 15:38:02 · 2279 阅读 · 0 评论 -
【Python】约瑟夫问题
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。用python解决约瑟夫问题代码量及其少,只需定义一个原创 2014-06-03 14:30:29 · 1057 阅读 · 0 评论 -
【数据结构】队列的出队和入队操作
队列的操作规则是先进先出,要注意分三种情况,1.队列为空原创 2014-06-03 16:01:58 · 15591 阅读 · 1 评论 -
【数据结构】判断两个二叉树是否相等
判断两个二叉树是否相等,就是当根节点相等时原创 2014-06-06 13:14:57 · 1948 阅读 · 1 评论 -
【数据结构】算法复杂度
算法复杂度是在《数据结构》这门课程的第一章里出现的,因为它稍微涉及到一些数学问题,所以很多同学感觉很难,加上这个概念也不是那么具体,更让许多同学复习起来无从下手,下面我们就这个问题给各位考生进行分析。首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某个算法的时间耗费,它是该算法所求解问题规模n的函数,而后者是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 当我们评转载 2014-05-28 16:36:26 · 537 阅读 · 0 评论 -
【数据结构】双链表的建立,排序,插入,删除
双链表的简历与单链表类似,只是每个jiedi多了一个pre指针原创 2014-06-02 18:05:01 · 628 阅读 · 0 评论 -
【数据结构】循环链表解决约瑟夫环问题
// 13_3.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include using namespace std;typedef struct LNode{ int data; struct LNode原创 2014-06-03 14:17:01 · 1464 阅读 · 0 评论 -
常用数据结构的时间复杂度
常用数据结构的时间复杂度Data StructureAddFindDeleteGetByIndexArray (T[])O(n)O(n)O(n)O(1)Linked list (LinkedList)O(1)O(n)转载 2014-09-26 19:19:14 · 2656 阅读 · 0 评论 -
【数据结构】给出一个链表,遍历一次就找到中间节点
// 13_1_7.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include using namespace std;typedef struct student{ int data; s原创 2014-06-02 16:16:45 · 2342 阅读 · 1 评论 -
【Java】实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点
直接free(p),这样行不通,因为我们不能访问其他结点;如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点public static boolean deleteNode (LinkListNode n) { if( null == n || null == n.next ) return false; LinkListNode next = n原创 2015-07-08 17:02:22 · 1991 阅读 · 0 评论 -
【Java】编写代码,移除未排序链表中的重复结点
移除重复结点,需要知道哪些结点是重复的,可以用一个哈希表, 如果有重复的元素,则将该元素从链表里删除,然后继续迭代hashtable基本用法:int size();得到键值对数boolean isEmpty();判断是否为空boolean containsKey(Object key);判断是否包含以key为键的键值对boolean containsValue(Object k原创 2015-07-08 15:18:54 · 1426 阅读 · 0 评论 -
【Java】以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于等于x的结点之前
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于等于x的结点之前可以用两个链表,一个存储小于x的结点,一个存储大于等于x的结点,然后将两个链表合并到一起import java.util.*;public class partition { public LinkedList Partition(LinkedList node, int x){ LinkedLi原创 2015-07-08 20:42:32 · 2731 阅读 · 2 评论 -
【数据结构】散列表
比较并对比散列表和STL map。 如果输入的数据量不大,可以选用哪些数据结构替代散列表?在散列表里,值的存放是通过将键传入散列函数实现的。值并不以排序后的顺序存放。此外,散列表以键值找出索引,进而找到存放值的地方,因此,插入或查找操作均摊后可以在O(1)时间内完成。(假定该散列表很少发生碰撞冲突)散列表还必须处理潜在的碰撞冲突,一般通过拉链法解决(chaining),也就是,创建原创 2015-07-23 16:23:10 · 625 阅读 · 0 评论