例如,我的讲师说了一些关于没有释放任何内存的事情,并在使用链接列表进行操作时删除了指针。此外,他说,在双向链接列表上进行操作时,您应确保边缘情况正常。任何人都可以扩展这个吗?我不确定自己能得到什么。
例如,这是我们正在处理的那种链表:
UPDATE
DB1.myTable t1
INNER JOIN
DB1.table2 t2 on t1.col1table1 = t2.col1table2
SET
t1.col2table1 = t2.col2table2
WHERE
(t2.col3table2 = 'somevalue')
答案 0 :(得分:3)
在处理指针时,您始终要确保delete
任何不再使用的new
个对象。这样就没有任何内存泄漏。
边缘条件是,例如,当插入元素时,它是否适用于空列表,当项目作为第一个元素插入时,作为最后一个元素?通常,在实现插入时,我们为典型元素(即现有列表中间的元素)执行逻辑。但它应该适用于所有情况。我提到的案例可以被视为边缘条件,并且必须考虑每个要为列表实现的操作。
答案 1 :(得分:0)
由于您使用的是'struct'而不是'class',因此为每个节点实现一些操作函数。
更新:
我提到class
,因为我评论的函数通常在面向对象的链接列表中实现为对象'方法,
但这些操作也适用于程序编程。
示例:
struct Node {
Node *next;
Node *prev;
T datum;
};
Node *first; // points to first Node in list, or 0 if list is empty
Node *last; // points to last Node in list, or 0 if list is empty
void NodesLink(Node* A, Node* B)
{
if ((A != NULL) && (B != NULL))
{
A->next = B;
B->prev = A;
}
} // void NodesLink (...)
void NodesInsertAfter(Node* A, Node* NewNode)
{
if ((A != NULL) && (NewNode != NULL))
{
Node* B = A->next;
NodesLink(A, NewNode);
NodesLink(NewNode, B);
}
} // void NodesLink (...)
独立的实用程序功能将使您的代码更加一致,并且易于调试和修复。
答案 2 :(得分:0)
一些边缘情况可能是
(a)没有节点
(b)只有一个节点
(c)在头/尾添加节点
(d)在遍历列表时避免无限循环
(e)避免内存泄漏和悬空指针
这些是应该进行的基本检查。