要学习链接列表(双重链接)概念,我正在编写一些简单的常用函数来处理它们。大多数函数都指向DL_List 结构,它是句柄,不仅包含指向第一个和最后一个元素的链接,还包含列表中的当前位置。
typedef struct DL_Node {
struct DL_Node *next = NULL;
struct DL_Node *prev = NULL;
int data;
} DL_Node;
typedef struct DL_List {
struct DL_Node *first = NULL;
struct DL_Node *last = NULL;
struct DL_Node *cur = NULL;
} DL_List;
因此我总是必须将指针传递给句柄。
int main() {...
DL_List list; // lives on the stack
init_list(&list, 9);
push(&list, 7);
append(&list, 10);
insert_after(&list, -31);
print_list(&list);
...}
所以这就是问题:有没有办法避免重新传递&list
?也许是typedefing?
答案 0 :(得分:0)
没有使用全局变量或可怕的宏,没有。您明确地将希望函数操作的对象作为参数传递。
答案 1 :(得分:0)
你可以做到
int main() {...
DL_List list; // lives on the stack
DL_List * plist = &list;
init_list(plist, 9);
push(plist, 7);
append(plist, 10);
insert_after(plist, -31);
print_list(plist);
...}
如果你想避免输入&
,但它并没有真正为你节省一些东西。
一个优秀的编译器应该优化它。