摘要: 邻接矩阵无向图是指通过邻接矩阵表示的无向图。上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边。由于这是无向图,所以边(A,C)和边(C,A)是同一条边;这里列举边时,是按照字母先后顺序... 阅读全文
posted @ 2014-12-04 23:22 Jessica程序猿 阅读(2683) 评论(0) 推荐(0) 编辑
摘要: 1. 图的定义定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。2. 图的种类根据边是否有方向,将图可以划分为:无向图和有向图。2.1 无向... 阅读全文
posted @ 2014-12-04 23:18 Jessica程序猿 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 3.6 编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中(如数组)。该栈支持如下操作:push、pop、peek和isEmpty。解答使用一个附加的栈来模拟插入排序。将原栈中的数据依次出栈与附加栈中的栈顶元素比较, 如果附加栈... 阅读全文
posted @ 2014-12-04 20:22 Jessica程序猿 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 3.5 实现一个MyQueue类,该类用两个栈来实现一个队列。解答队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈, 出队列如果第二个栈不为空,则直接从第二个栈出队列,否则将第一个栈的数据依次压入第二个栈,然后出栈... 阅读全文
posted @ 2014-12-04 20:00 Jessica程序猿 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 3.4 在经典问题汉诺塔中,有3根柱子及N个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自底向上从大到小依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时有以下限制:每次只能移动一个盘子;盘子只能从柱子顶端滑出移到下一根柱子;盘子只能叠在比它大的盘子上。请运用栈... 阅读全文
posted @ 2014-12-04 17:30 Jessica程序猿 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 3.3栈就像叠盘子,当盘子叠得太高时,就会倾斜倒下。因此,在真实的世界中,当一叠盘子 (栈)超过了一定的高度时,我们就会另起一堆,再从头叠起。实现数据结构SetOfStacks 来模拟这种情况。SetOfStacks由几个栈组成,当前一栈超出容量时,需要创建一个新的栈 来存放数据。SetOfStac... 阅读全文
posted @ 2014-12-04 16:52 Jessica程序猿 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 3.2 请设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值。push、pop和min三个方法的时间复杂度必须为O(1)。我们假设除了用一个栈s1来保存数据,还用另一个栈s2来保存这些非冗余最小值。那么, 当我们将数据压到要s1时,同时将它和s2的栈顶元素比较,如果不大于s... 阅读全文
posted @ 2014-12-04 11:12 Jessica程序猿 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 3.1 描述如何只用一个数组来实现三个栈。解答我们可以很容易地用一个数组来实现一个栈,压栈就往数组里插入值,栈顶指针加1; 出栈就直接将栈顶指针减1;取栈顶值就把栈顶指针指向的单元的值返回; 判断是否为空就直接看栈顶指针是否为-1。如果要在一个数组里实现3个栈,可以将该数组分为3个部分。如果我们并不... 阅读全文
posted @ 2014-12-04 10:03 Jessica程序猿 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 2.7 编写一个函数,检查链表是否为回文。思路:1)可以利用链表中的元素采用头插法创建一个新的链表,然后比较两个链表的元素是否相等。 2)利用快慢指针,将链表后半部分逆转之后,比较前半部分与后半部分是否相等。 3)利用栈将链表中的元素保存,然后弹出与链表中元素比较。C++实现代码:#inc... 阅读全文
posted @ 2014-12-04 08:45 Jessica程序猿 阅读(173) 评论(0) 推荐(0) 编辑