【发布时间】:2021-07-24 08:10:28
【问题描述】:
您好,我正在构建一个双向链表结构,我希望按字母顺序打印我的测试名称/单词。
最终产品应如下所示:
BRAIDENBRANTDAVEKIM
目前show_all 将显示复制的所有先前条目的最后一个条目。
示例:如果最后输入“DAVE”,所有输出将是:
DAVEDAVEDAVEDAVE
如果我在 create() 函数中打印,我会得到输出:
BRAIDENBRANTKIMDAVE
这不是字母顺序,而是我输入它们的顺序。
注意:到目前为止,我的双向链表似乎没有通过其结构打印。我的意思是你可以简单地打印节点或调用show_all 任何一种方式,因为现在它没有通过结构打印,就好像它们正在单独打印一样。
Program.pyx
from libc.stdlib cimport malloc, free
cdef struct Node
cdef struct Node:
char* word
Node* prev
Node* next
cdef class DoublyLinkedList:
cdef Node* head
cdef Node* tail
cdef Node* last_node
cdef Node* next_node
def __cinit__(self):
self.head = NULL
self.tail = NULL
self.last_node = NULL
self.next_node = NULL
def create(self, word):
cdef Node* new_node = <Node*>malloc(sizeof(Node*))
if not new_node:
raise MemoryError()
new_node.word = word
new_node.prev = NULL
new_node.next = NULL
if (self.head == NULL):
self.head = new_node
self.tail = new_node
elif (self.head.word >= new_node.word):
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
else:
last_node = self.head
next_node = self.head.next
while (next_node != NULL):
if (next_node.word >= new_node.word):
break
last_node = next_node
next_node = next_node.next
new_node.prev = last_node
new_node.next = next_node
last_node.next = new_node
if (next_node == NULL):
self.tail = new_node
else:
next_node.prev = new_node
def show_all(self):
while (self.head != NULL):
print(self.head.word)
self.head = self.head.next
testing_interface.py
import program
algo = program.DoublyLinkedList()
algo.create(bytes("BRAIDEN", encoding="utf-8"))
algo.create(bytes("BRANT", encoding="utf-8"))
algo.create(bytes("KIM", encoding="utf-8"))
algo.create(bytes("DAVE", encoding="utf-8"))
algo.show_all()
【问题讨论】: