数据结构 链表改进
主要介绍循环链表和双向循环链表
2-1
对于一非空的循环单链表,h
和p
分别指向链表的头、尾结点,则有()
循环单链表判空:
设头结点front,尾节点rear:
(front->next = front),rear->next = rear;
2-2
在双向循环链表结点p
之后插入s
的语句是
过程就是,画个如下的图,然后按照选项给出的数据,挨个尝试,
当然,对于这类题目,记住一个点,可以大大减少选择难度:
最后一个一定是: p->(next) = s;
翻译成通用的就是,两个操作点的直接关系,放在最后!
2-4
某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?
设尾指针为 rear,尾部插入p,rear->next = p,rear = rear-next; 复杂度O(1)
删除第一个元素,rear->next = rear->next->next,复杂度O(1)
2-5
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间
头结点设为front;
最后一个节点插入;front->prior->next = p,p->prior = front->prior,p->next=front,front->prior=p;,复杂度O(1)
删除尾节点:front->prior->prior->next=front,front->prior = front->prior->prior;复杂度O(1)
这种题型就是想法设法,把几种操作的时间复杂度求解出来,然后进行比对,选择出正确答案;
2-18
已知指针ha和hb分别是两个单链表的头指针,下列算法将这两个链表首尾相连在一起,并形成一个循环链表(即ha的最后一个结点链接hb的第一个结点,hb的最后一个结点指向ha),返回该循环链表的头指针。请将该算法补充完整。
typedef struct node{
ElemType data;
struct node *next;
}LNode;
LNode *merge(LNode *ha, LNode *hb) {
LNode *p=ha;
if (ha==NULL || hb==NULL) {
cout<<”one or two link lists are empty!”<<endl;
return NULL;
}
while ( p->next!=NULL )
p=p->next;
p->next=hb;
while ( p->next!=NULL )
p=p->next;
__________
}
这种类型的题目,先把代码里面最后的指针位置弄清楚,代码里进行的操作已经把ha , hb 连接了起来,p现在指向hb 尾节点,你的目的是实现循环,p->next = ha;这是候的p->next正好是循环链表的头指针 , return p->next!==ha;
2-21
采用多项式的非零项链式存储表示法,如果两个多项式的非零项分别为N1和N2个,最高项指数分别为M1和M2,则实现两个多项式相乘的时间复杂度是()
数学问题,非零项*和
- 浅谈 Java 并发编程中的若干核心技术
- ASP.NET Core的路由[3]:Router的创建者——RouteBuilder
- ASP.NET Core的路由[2]:路由系统的核心对象——Router
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
- 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
- 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
- 学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口——Startup
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
- .NET Core多平台开发体验[4]: Docker
- .NET Core多平台开发体验[3]: Linux (Windows Linux子系统)
- .NET Core多平台开发体验[2]: Mac OS X
- .NET Core多平台开发体验[1]: Windows
- 如何远程关闭一个ASP.NET Core应用?
- 【深度学习】谷歌deepdream原理及tensorflow实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Jenkins+Maven+Svn实现代码自动打包与发布
- python六十五课——单元测试(一)
- python六十六课——单元测试(二)
- Linux企业生产常见问题集合(一)答案
- python六十八课——网络编程之UDP协议
- python六十九课——网络编程之TCP协议
- Linux扩容分区操作过程
- python第七十课——python2与python3的一些区别
- Linux运维必会的100道MySql面试题之(一)
- Linux运维必会的100道MySql面试题之(二)
- Apache服务的反向代理及负载均衡配置
- Linux系统集群架构线上项目配置实战(二)
- Linux系统集群架构线上项目配置实战(三)
- Linux系统集群架构线上项目配置实战(四)
- Linux系统集群架构线上项目配置实战 五(完结篇)