链表学习(2)
来源:互联网 发布:微信分销系统源码 编辑:程序博客网 时间:2024/06/18 13:10
1、(1)对于双向循环链表,在p指针所指的节点之后插入s指针所指节点的操作应为:
s->left=p;
s->right=p->right;
p->right->left=s;
p->right=s;
分析:双向链表的插入顺序,先搞定插入节点的前驱和后继,再搞定后节点的前驱,最后搞定前节点的后继。
(2)补充:在非空双向循环链表中q所指向的结点前插入一个由p所指的链结点的过程:
rlink(p)<-q;
llink(p)<-llink(q);
llink(q)<-p;
rlink(llink(p))<-q;
双链表的插入两种方法
一、 首先处理新插入节点p的后继、前驱,然后再处理后继的前驱
p->next=q;//p的后继
p->pre=q->pre;//p的前驱
q->pre=p;//q的前驱
p->pre->next=p;//新结点的前驱(p->pre)的后继
二、p->next=q;//p的后继
p->pre=q->pre;//p的前驱
q->pre->next=p;//这一步在前面
q->pre=p;
2、数组比链表的存储空间小,是指占用的存储空间少。因为链表结点需要持有额外的指针,因此所占用的空间较数组更大。
3、有一个单向链表,头指针和尾指针分别为p,q,以下哪项操作的复杂度不受队列长度的影响?
删除头部元素;头部元素之前插入一个元素;尾部元素之后插入一个元素;
删除尾节点需要知道它前驱结点的指针。由于是单链表,不能直接由尾部节点得到前一个节点。
4、对长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现、
分析:区别长度无穷大和无限列表。由于计算机资源的限制,长度无穷大的广义表不能再计算机中实现。但是若考虑一个广义表E=(a,E)-这是一个递归的表,它的长度是2。E相当于一个无限的列表 E=(a,(a,(a,…))),这个广义表在计算机可以实现。
无穷大常见于数学,计算机设计上不会考虑那么没有市场。
7、在一个有N个元素的有序单链表中查找具有给定关键字的结点,平均情况下的时间复杂性为O(N)
分析:单链表只能顺序跑下去查找,没有捷径。平均查找次数为N/2,所以复杂度为0(N)
8、元素在集合中有序,指的是元素插入过程中记录了元素的插入顺序。
9、线性表(a1,a2…an)以链接方式存储时,访问第i个位置元素的时间复杂性是O(n).
分析:元素在链表的位置为i,意味着通过遍历执行i次,则i<n,可以知道时间复杂度为O(n)
- 链表学习(2)
- 数据结构之链表学习(2)
- 链表学习(1)
- 链表学习(3)
- 链表学习(4)
- 链表学习(5)
- 链表学习(一)
- 链表学习(6)
- 链表学习(1)
- 数据结构学习记录连载3(链表的学习)
- 线性表学习(2)
- Glib学习(2) 双向链表 Doubly-Linked Lists
- 一步一步学习数据结构(2)-链表及其操作
- 数据结构学习笔记(2)---双向链表
- [学习记录]Kepware学习记录(2)
- jquery学习笔记2(W3School学习)
- 集成学习学习笔记(2)
- 机器学习-(2):无监督学习
- MyBatis传入多个参数的问题
- sql
- ABAP中的系统变量SY-INDEX与SY-TABIX
- 5-70 情人节 (15分)
- [leetcode: Python]219. Contains Duplicate 2
- 链表学习(2)
- SpringMVC文件上传
- LeetCode ZigZag Conversion
- Nginx 配置 Web服务器
- AOP concepts
- acm_随机算法
- 基于事件的 JavaScript 编程:异步与同步
- Apt-get update出错
- Cocos Creator v1.5.0 内测版发布帖(5月5日更新 beta.3)