【Weiss】【第03章】双链表例程】的更多相关文章

主要是,感觉原来的链表例程通过Node的分配形成了链表,但是没有自动消除Node的办法比较危险,一旦在clear()之前把链表赋了其它值就内存泄漏了. 所以改了析构函数,自动清理分配出来的内存.既然改了析构同时就要改拷贝合成与拷贝赋值. 然后还给链表加了个尾指针,否则每次插入都要O(N)的时间真的很蛋疼……改了以后就是O(1)了 栈.队列.双链表的到时候再改. 添加的构造函数.赋值函数.析构函数如下: //构造函数,这部分直接增加在链表内部 public: //拷贝构造函数,深拷贝 List<T…
这种基础例程,如之前所提,会有一个实现和一个简单的测试代码. 链表其实没什么可说的,其实包括后面的栈和队列也没什么可说的,直接放代码吧. 下面这个是测试代码 #include <iostream> #include "linklist.h" using namespace std; using namespace linklist; template class List<int>; int main(void) { List<int> number…
双链表因为多了个前向指针,需要考虑的特殊因素多了一倍 所以中间插入(这儿没写)和中间删除会比较复杂. 其它倒没什么特别的,代码如下. 测试代码 #include <iostream> #include "double_linklist.h" using namespace std; using namespace doublelinklist; template class DList<int>; int main(void) { DList<int>…
前几个例程还是相当简单的,把链表即时改了一下就是队列了. 还有想了一下,决定这种例程的代码放法是:先把测试代码默认折叠放在前面,然后把实现代码默认展开放在后面. 测试代码如下: #include <iostream> #include "queue.h" using namespace std; using namespace queue; template class Queue<int>; int main(void) { Queue<int>…
写栈比队列更简单一些,毕竟只有一个数据出入口. 之前用C在程序里模拟栈代替递归的时候,直接搞个数组来实现都是非常轻松愉快的事情. 不多说,放代码. 测试代码 #include <iostream> #include "stack.h" using namespace std; using namespace stack; template class Stack<int>; int main(void) { Stack<int> number; //…
[练习3.3] 通过之调整指针(而不是数据)来交换两个相邻的元素,使用 a.单链表 b.双链表 Answer: 先放测试代码,折叠标题可以看到分别是哪种链表的测试. 实测可满足题意,但单链表和双链表的两段代码是分开实现的,所以需要分开测试. 如果要合在一起的话,需要改一下头文件包含以及命名空间. 单链表测试代码: #include <iostream> #include "linklist.cpp" using namespace std; using namespace…
双链表中每个节点包含指向当前和之后节点的指针,插入节点到双链表中需要考虑四种情况: 1.插入到链表头部 2.插入到链表尾部 3.插入到空链表中 4.插入到链表内部 #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 //指针fwd指向前一个节点,bwd指向后一个节点 typedef struct NODE { struct NODE *fwd; struct NODE *bwd; int val…
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDate: 2018/4/6 9:14 * @Modify by: * @ModifyDate: */ public class Chapter2_2 { public Node removeKNode(Node head, int k) { if (head == null || k < 1) { re…
[练习3.6] 编写将两个多项式相加的函数.不要毁坏输入数据.用一个链表实现. 如果这两个多项式分别有M项和N项,那么你程序的时间复杂度是多少? 两个按幂次升序的多项式链表,分别维护一个指针. 幂较小者将元素的副本拷贝入节点并加入新链表,指针向后移动. 幂同样大时,将两者的系数相加后的结果加入新链表,两个多项式链表的指针共同向前移动. 其中一个多项式到达尾部时,如另一个未到达尾部,则一边后移一边将相同元素的新节点加入新链表. 时间复杂度O(M+N). 测试代码如下: #include <iost…
[练习3.2] 给你一个链表L和另一个链表P,它们包含以升序排列的整数.操作printlots(L,P)将打印L中那些由P所指定的位置上的元素. 例如,如果p=1,3,4,6,那么,L的第一.第三.第四和第六个元素被打印出来. 你应该只使用基本的表操作,该过程的运行时间是多少? Answer: 老样子,先放折叠的实测代码. #include <iostream> #include <string> #include "linklist.h" using name…