所以我有两个类-一个是作为双向链表实现的图书库,另一个类是图书节点的DLL节点类,这是:
class Book:
def __init__(self,name,author,dateadded,viewed = False, nextnode=None, prevnode=None):
self._name = name
self._author = author
self._dateadded = dateadded
self._viewed = viewed
self._next = nextnode
self._prev = prevnode
def __str__(self):
""" Return string representation of book """
outstr = ""
outstr += self._name + " /n"
outstr += self._author + "/n"
outstr += self._dateadded
return outstr
def read(self):
""" Simulates the book being read & return string representation of the book """
self._viewed = True
outstr = "CURRENTLY READING: "
outstr += self._name
return outstr
我的book library类处理一系列book节点,如下所示:
class BookLibrary:
""" A Doubly Linked List implementing a book library """
def __init__(self):
self.size = 0
self.head = None
self.tail = None
我遇到的问题是在我的add_book()
方法中——当我运行它时,我得到的错误是TypeError:add_book()接受1个位置参数,但给出了5个
。这是函数本身,我真的不知道哪里出了问题:(
def add_book(book):
""" Add a book to the library in decreasing order of dateadded """
n = Book(book)
if self.size == 0:
self.head = n
self.tail = n
current_book = n
self.size += 1
elif self.head._dateadded <= n._dateadded:
n._next = self.head
self.head._prev = n
n._prev = None
self.head = n
self.size += 1
elif self.tail._dateadded <= n._dateadded:
self.tail._prev._next = n
n._prev = self.tail._prev
n._next = self.tail
self.tail._prev = n
self.size += 1
elif self.size != 0:
iterator = self.head._next
while iterator._next is not None:
if n._dateadded >= iterator._dateadded:
n._prev = iterator._prev
iterator._prev._next = n
n._next = iterator
iterator._prev = n
self.size += 1
break
else:
iterator = iterator._next
return None
非常感谢您的帮助谢谢
以下是我运行的代码:
book_lib = BookLibrary()
book_lib.add_book("Harry Potter", "JK ROWLING", 19990101, False)
如果您要传递给add_book()
的所有参数,这是您的问题。它只期望一个参数,book
,但是我假设您正在传递class Book
期望的所有参数。
最好先实例化书对象,然后直接将它们传递到add_book
方法中。
我写了一个程序,通过双链表管理银行账户,但我发现取消程序有问题。 我仍然有同样的问题,即使我尝试了这个方法:-(pnt)-
本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。
主要内容:双向链表的创建目前我们所学到的 链表,无论是动态链表还是 静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为 单向链表(或 单链表)。 虽然使用单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后"
链表作为数组之外的一种常用序列抽象, 是大多数高级语言的基本数据类型, 因为 C 语言本身不支持链表类型, 大部分 C 程序都会自己实现一种链表类型, Redis 也不例外 —— 实现了一个双端链表结构。 双端链表作为一种常见的数据结构, 在大部分的数据结构或者算法书里都有讲解, 因此, 这一章关注的是 Redis 双端链表的具体实现, 以及该实现的 API , 而对于双端链表本身, 以及双端链表
双向链表 结构体 struct rt_list_node 双向链表节点 更多... 宏定义 #define rt_container_of(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member))) 获取type结构体中member成员在这个结构体中的偏移 #de
双向链表 Linux 内核自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会从双向链表数据结构开始内核的数据结构。为什么?因为它在内核里使用的很广泛,你只需要在 free-electrons.com 检索一下就知道了。 首先让我们看一下在 include/linux/types.h 里的主结构体: struct list_head { struct l