随笔分类 - 数据结构与算法
摘要:问题背景 有一种数据结构,叫做散列表,还有一些称之为“字典”(dict)、“映射”(map)、“哈希”(hash)。 这种数据结构有个特点,一般情况下,能在O(1)时间内根据关键字找到要查询的信息(进行一次或者很少次比较),这是因为散列表的底层一般会使用数组实现,利用“散列函数”或者称为“hash函
阅读全文
摘要:在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性,即:二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字 删除结点有三种情况 1.被删除的结点是叶子 2.被删除的结点只有左子树或者只有右子树 3.被删除的结点既有左子树,也有右子树 第一种:被删除的结点
阅读全文
摘要:这里采用的是链式存储,每个结点包含三个属性(指向左右孩子的指针和本结点的数据),如果想了解顺序存储二叉树,可以参考http://www.cnblogs.com/-beyond/p/6065189.html 采用先序递归创建二叉树,叶子的左右孩子链域为NULL 输入的顺序为:abd--e--c-f--
阅读全文
摘要:判断入栈顺序是否合法,这个问题其实很简单,前提得先明白原理。现在就以一道题为例 解题思路: 假设有5个数,出站顺序是1 2 5 3 4,看下面的示意图 首先,栈为空,先将入栈序列的1入栈,这时,站顶元素和出栈的第一个元素相同,于是1出栈;栈此时又为空,然后在讲入栈序列的2入栈,同样,站顶元素和出栈的
阅读全文
摘要:队列和栈差不多,唯一的区别就是栈式先进后出(FILO),队列是先进先出(FIFO),队列的示意图如下 其基本操作的代码如下 一定要注意LinkQueue,QueuePtr,QNode之间的关系,代码中有的地方是结构体的"."(访问),有的地方是"->"访问,顺序要搞清楚,不然会错一片的!
阅读全文
摘要:接受用户从终端输入的数据,当用户发现刚刚键入的字符是错误的,‘#’表示前一个字符无效;‘@’表示当前行或之前的数据无效。
阅读全文
摘要:循环链表与普通链表最大的区别在于尾结点的指针域指向什么:普通链表的尾结点的指针域指向空(NULL),而循环链表的尾结点的指针域指向头结点,形成一个环!
阅读全文
摘要:该代码的二叉树结点是数字,采用的是用数组存储,一般使用在空结点较少的情况,使用的时候,一定要清楚二叉树元素在数组中的存储顺序特点,比如左右子树序号有什么特点,怎么由孩子结点的找到双亲节点…… 如果想了解链式存储二叉树,可以参考http://www.cnblogs.com/-beyond/p/6200
阅读全文
摘要:#include #include using namespace std; //定义初始化长度和每次增加的长度 const int STACK_INIT_SIZE=10; const int STACK_INCREAMENT=2; struct Stack{ int* base; //栈底 int* top; //栈顶 int stacksize; //已分...
阅读全文
摘要:第一次在《算法导论》中看到这三种渐进记法的符号,当时对此一窍不通,所以也就没有注意它们,直接把他们忽略了,知道学习算法的时候,才知道当初的做法有多傻,因为一个算法的好坏以及复杂度,可以用它们来表示。现在我学习过程当中用的最多的是O(g(n)),大概是老师认为我们还不具有算法设计分析与优化的能力吧。
阅读全文
浙公网安备 33010602011771号