摘要:
# coding: utf-8 class Node(object): def __init__(self, data, next=None): self.data = data self.next = next def reverserNode(head): if head == Node or 阅读全文
摘要:
栈并不是python的内建类型。python程序员在必要的时候可以使用python列表来模拟基于数组的栈。如果你将列表的末尾看作是栈的顶,列表方法append就是将元素压入到栈中,而列表方法pop会删除并返回栈顶的元素。这种选择的主要缺点是,所有其他的列表操作都可以操作这个栈。这写额外的操作都违反了 阅读全文
摘要:
栈是线性的集合,其中,访问都严格地限制在一端,也叫做顶(top)。栈地=的一个经典的类比,就是每个每个餐馆都能看到摞起来的干净餐盘。当需要用一个餐盘的时候,从一摞餐盘的顶部去走一个,当任何洗干净的餐盘放回到厨房的时候,他们也都是放在一摞的顶部。没有人会专门从中间抽取一个很好的餐盘,靠近底部的餐盘甚至 阅读全文
摘要:
双链表结构比单链表结构更有优越性。它允许用户做如下的事情: 从给定的节点,向左移动到前一个节点。 直接移动到最后一个节点。 双链表结构的节点类的python实现,通过给provious指针添加一个字段,扩展了前面所讨论的Node类。如下是两个类的代码: # coding: utf-8 class N 阅读全文
摘要:
在单链表结构上,在第1个节点插入和删除,只不过是第i个节点的插入和删除的特殊情况。这些情况只所以特殊,是因为head指针必须重置。可以使用一个带有哑头节点循环链表结构来简化这些操作。循环链表结构包含了从结构中的最后一个节点返回到第一个节点的链接。在这个实现中,至少总是有一个节点。这个节点也就是哑头节 阅读全文
摘要:
单链表结构表现出和数组不同的时间和空间权衡。 下表为单链表结构的运行时间: 操作 运行时间 在第i个位置访问 O(n),平均情况 在第i个位置替换 O(n),平均情况 在开始处插入 O(1),最好情况和最差情况 在开始处删除 O(1),最好情况和最差情况 在第i个位置插入 O(n),平均情况 在第i 阅读全文
摘要:
一、从开始处删除 从开始处删除,通常可以假设结构中至少有一个节点。这个操作返回删除项。其形式如下: # coding: utf-8 class Node(object): def __init__(self, data, next=None): self.data = data self.next 阅读全文
摘要:
一、在开始处插入 链表结构存在优于线性操作的几种操作。再某些情况下,这些操作使得链表结构比数组更加合适。第一种情况就是在结构的开始处插入一项。如下: # coding: utf-8 class Node(object): def __init__(self, data, next=None): se 阅读全文
摘要:
在单链表结构中的替换也利用了遍历模式。这种情况下,我们在链表结构中搜索一个给定项或一个给定位置,并且用新的项替换该项。第一个操作,即替换一个给定的项,并不需要假定目标项在链表结构中。如果目标项不存在,那就不会发生替换,并且该操作返回False。如果目标项存在,新的项会替换它,并且该操作返回True。 阅读全文
摘要:
链表结构的顺序搜索和遍历是类似的,因为也必须从第1个节点开始且沿着链表直到遇到哨兵。下面例子可能会遇到两个哨兵: 空链接,表明不再有需要检查的数据。 等于目标项的一个数据项,表明一次成功的搜索。 # coding: utf-8 class Node(object): def __init__(sel 阅读全文