ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

<算法导论>练习10.2

2021-05-23 21:01:16  阅读:142  来源: 互联网

标签:head 10.2 return 导论 next 链表 算法 def


10.2-1
插入可以在常量的时间内完成,只需要将其插入到特定的位置比如链表的开始或结尾即可。
删除元素需要找到要删除元素的位置,无法在常量的时间内完成,除非删除的元素在链表的开始或结尾。
10.2-2
栈的特点是先进后出以链表来模拟的话,插入删除操作均在链表头完成即可。
代码如下:

def push(l,x):
	x.next=l.head
	l.head=x
def pop(l):
	if l.head==None:
		return "error"
	else:
		x=l.head
		l.head=x.next
		return x    #将栈顶元素弹出

10.2-3
用单链表实现一个队列,队列的特点是先进先出,那么插入在链表尾进行,删除在链表头进行即可。

def push(l,x):
	#l是链表,x是要插入的元素
	if l.head==NULL:
		l.head=x
	else:
		l.tail=x   #l.tail是指向尾节点的哨兵,正常来说需要从头一步一步走到尾节点
		x.next=NULL
	
def pop():
	if l.head==NULL :
		return "error"
	else :
		x=l.head
		l.head=l.head.next
		return x      #弹出头节点

10.2-4
如果已知链表的长度,就可以以计数的方式忽略对哨兵的检查。
不过书中的list_search’函数,在链表中没有k的时候返回的是头节点,如果把哨兵L.nil的属性值设为k的话,可以不加判断,若链表中不存在k的话,返回哨兵。但这样有可能会造成误判。所以最好还是保留判断。
10.2-5
l表示链表,l.head 表示头节点,l.nil 表示尾节点,x表示要插入或要删除的节点。

def insert(l,x)
	if l.nil.next==l.head:
		return "L is full"
	else :
		l.nil.next=x
		x=l.nil

def delete(l,x):
	p=l.head
	while p.next!=x:
		if p.next==l.nil:
			return "x is not exist"
		else:
			p=p.next
	p.next=x.next
	x.next=NULL
	del x #释放掉x所占存储空间

def search(l,x):
	p=l.head
	while p.next!=x:
		if p.next==l.nil:
			error "x is not exist "
	return p.next

10.2-6
把第一个链表的尾节点的下一个元素改为第二个链表的头元素即可,如果有哨兵的话,把第二个链表的哨兵去掉,并把尾节点的下一个元素指向第一个链表的哨兵。

10.2-7
题意为反转链表。
假设已知链表为L

def reverse_list(l):
	p=l.head
	q=p.next
	while q.next:
		t=q.next
		q.next=p
		p=q
		q=t
	head.next=NULL
	q.next=p
	return q

标签:head,10.2,return,导论,next,链表,算法,def
来源: https://blog.csdn.net/a1121420/article/details/116545008

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有