如何在C++中创建列表?我需要它来创建一个链表。我该怎么做呢?有没有好的教程或例子我可以遵循?
9o685dep1#
我认为你知道C已经有一个链表类,你想实现你自己的,因为你想学习如何去做。首先,阅读Why do we use arrays instead of other data structures?,它包含了一个很好的基本数据结构答案。然后考虑如何在C中建模它们:
struct Node { int data; Node * next; };
基本上,这就是实现列表所需的全部内容!(非常简单的一个)。然而,它没有抽象,你必须链接每手的项目:
Node a={1}, b={20, &a}, c={35, &b} d={42, &c};
现在,你已经有了一个节点的链表,所有节点都在堆栈上分配:
d -> c -> b -> a 42 35 20 1
下一步是编写一个指向起始节点的 Package 器类List,并允许根据需要添加节点,跟踪列表的头部(以下是非常简化的):
List
class List { struct Node { int data; Node * next; }; Node * head; public: List() { head = NULL; } ~List() { while(head != NULL) { Node * n = head->next; delete head; head = n; } } void add(int value) { Node * n = new Node; n->data = value; n->next = head; head = n; } // ... };
下一步是使List成为一个模板,这样您就可以填充其他值(不仅仅是整数)。如果您熟悉智能指针,则可以将使用的原始指针替换为智能指针。我经常发现人们向初学者推荐聪明的指针。但在我看来,你应该首先理解为什么你需要智能指针,然后使用它们。但这要求您首先了解原始指针。否则,你使用一些神奇的工具,而不知道为什么你需要它。
guz6ccqo2#
你真的应该使用standard List class。当然,除非这是一个家庭作业问题,或者你想知道STL是如何实现列表的。你会在google上找到很多简单的教程,比如this one。如果你想知道链表是如何“在引擎盖下”工作的,试着搜索C列表示例/教程,而不是C++。
gywdnpxw3#
如果你要使用std::list,你需要传递一个类型参数:
std::list
list<int> intList; list<int>* intListPtr = new list<int>;
如果你想知道列表是如何工作的,我建议你在谷歌上搜索一些C/C教程来了解这个主题。下一步是学习足够的C来创建一个列表类,最后是一个列表模板类。如果你有更多的问题,请回到这里。
bxjv4tth4#
为什么要重新发明轮子。只需要使用STL列表容器。
#include <list> // in some function, you now do... std::list<int> mylist; // integer list
More information...
dluptydi5#
我猜这是一个家庭作业问题,所以你可能想去here。它有一个解释链表的教程,给出了很好的伪代码,也有一个C++实现,你可以下载。我建议在盲目地使用实现之前阅读解释并理解伪代码。如果你想继续学习计算机科学,这是一个你真的应该深入了解的主题。
x9ybnkn66#
Boost ptr_listhttp://www.boost.org/doc/libs/1_37_0/libs/ptr_container/doc/ptr_list.html高温加热
4uqofj5v7#
使用C++模板创建列表即
template <class T> struct Node { T data; Node * next; }; template <class T> class List { Node<T> *head,*tail; public: void push(T const&); // push element void pop(); // pop element bool empty() // return true if empty. };
然后你可以这样写代码:
List<MyClass>;
类型T在运行时不是动态的。它只适用于编译时。完整的示例click here。对于C++模板教程click here。
T
j1dl9f468#
我们已经是21世纪了!!不要尝试实现已经存在的数据结构。尝试使用现有的数据结构。使用STL或Boost库
8条答案
按热度按时间9o685dep1#
我认为你知道C已经有一个链表类,你想实现你自己的,因为你想学习如何去做。
首先,阅读Why do we use arrays instead of other data structures?,它包含了一个很好的基本数据结构答案。然后考虑如何在C中建模它们:
基本上,这就是实现列表所需的全部内容!(非常简单的一个)。然而,它没有抽象,你必须链接每手的项目:
现在,你已经有了一个节点的链表,所有节点都在堆栈上分配:
下一步是编写一个指向起始节点的 Package 器类
List
,并允许根据需要添加节点,跟踪列表的头部(以下是非常简化的):下一步是使List成为一个模板,这样您就可以填充其他值(不仅仅是整数)。
如果您熟悉智能指针,则可以将使用的原始指针替换为智能指针。我经常发现人们向初学者推荐聪明的指针。但在我看来,你应该首先理解为什么你需要智能指针,然后使用它们。但这要求您首先了解原始指针。否则,你使用一些神奇的工具,而不知道为什么你需要它。
guz6ccqo2#
你真的应该使用standard List class。当然,除非这是一个家庭作业问题,或者你想知道STL是如何实现列表的。
你会在google上找到很多简单的教程,比如this one。如果你想知道链表是如何“在引擎盖下”工作的,试着搜索C列表示例/教程,而不是C++。
gywdnpxw3#
如果你要使用
std::list
,你需要传递一个类型参数:如果你想知道列表是如何工作的,我建议你在谷歌上搜索一些C/C教程来了解这个主题。下一步是学习足够的C来创建一个列表类,最后是一个列表模板类。
如果你有更多的问题,请回到这里。
bxjv4tth4#
为什么要重新发明轮子。只需要使用STL列表容器。
More information...
dluptydi5#
我猜这是一个家庭作业问题,所以你可能想去here。它有一个解释链表的教程,给出了很好的伪代码,也有一个C++实现,你可以下载。
我建议在盲目地使用实现之前阅读解释并理解伪代码。如果你想继续学习计算机科学,这是一个你真的应该深入了解的主题。
x9ybnkn66#
Boost ptr_list
http://www.boost.org/doc/libs/1_37_0/libs/ptr_container/doc/ptr_list.html
高温加热
4uqofj5v7#
使用C++模板创建列表
即
然后你可以这样写代码:
类型
T
在运行时不是动态的。它只适用于编译时。完整的示例click here。
对于C++模板教程click here。
j1dl9f468#
我们已经是21世纪了!!不要尝试实现已经存在的数据结构。尝试使用现有的数据结构。
使用STL或Boost库