如何在C++中創建列表?我需要它來創建一個鏈表。我會怎麼做呢?有好的教程或例子可以遵循嗎?我如何在C++中創建一個列表?
回答
我認爲你知道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
下一步是寫一個包裝類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成爲一個模板,這樣你就可以填充其他值(不僅是整數)。
如果您熟悉智能指針,則可以使用智能指針替換原始指針。通常我會發現人們推薦首發的智能指針。但在我看來,你應該首先明白爲什麼你需要智能指針,然後使用它們。但是這要求你首先要了解原始指針。否則,你會使用一些神奇的工具,而不知道你爲什麼需要它。
你應該真的使用standard List class。當然,除非這是一個家庭作業問題,否則你想知道STL如何實現列表。
你會發現很多簡單的谷歌教程,如this one。如果您想知道鏈接列表如何在「底層」下工作,請嘗試搜索C列表示例/教程而不是C++。
爲什麼要重新發明輪子。只需使用STL列表容器。
#include <list>
// in some function, you now do...
std::list<int> mylist; // integer list
我們已經在21世紀! 不要嘗試實現已經存在的數據結構。 嘗試使用現有的數據結構。
使用STL或者Boost庫
如果你要使用std::list
,你需要傳遞一個類型參數:
list<int> intList;
list<int>* intListPtr = new list<int>;
如果你想知道名單是如何工作的,我建議谷歌上搜索一些C/C++教程來獲得對該主題的理解。接下來的步驟就是學習足夠多的C++來創建一個列表類,最後是一個列表模板類。
如果您還有其他問題,請回到這裏。
我猜這是一個家庭作業問題,所以你可能想去here。它有一個解釋鏈表的教程,給出了很好的僞代碼,並且還有一個可以下載的C++實現。
我建議通過解釋和理解僞代碼之前盲目使用實現閱讀。如果您想在CS中繼續使用,那麼您應該深入理解這個話題。
創建使用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 hear。
對於C++模板教程click hear。
- 1. 我將如何在C#4.0中創建這個動態列表?
- 2. 如何在C中動態創建一個函數列表#
- 3. 我在C++中創建一個列表容器類和預期
- 4. 我如何在Scala中聲明創建一個列表?
- 5. 如何創建另一個列表中的一個列表?
- 6. 如何從C#中的兩個列表創建一個對象對的列表?
- 7. 在C++中創建列表
- 8. 如何在IOS應用創建一個表3列?(目標C)
- 9. 如何從一個列表中創建多個列表?
- 10. 我如何註冊一個我在C++中創建的DLL
- 11. 如何使用C#中的foreach在列表中創建列表?
- 12. 如何反轉我在C中創建的鏈接列表
- 13. 根據另一個列表的值創建一個列表c#
- 14. 我如何從數組中的列表創建兩個列表?
- 15. haskell如何從另一個列表創建一個新列表?
- 16. 如何從另一個列表創建一個嵌套列表?
- 17. 從列表中創建一個列表
- 18. 如何創建一個下拉列表?
- 19. 如何創建一個散列表
- 20. 如何在MySQL表中創建一個唯一的列?
- 21. C#從屬性列表中創建一個對象列表
- 22. 如何從Python中的列表創建一個循環列表?
- 23. 在MYSQL的列中創建一個表
- 24. 在ScrollView中創建一個列表
- 25. 在MySQL中創建一個列表
- 26. 從我的DTO創建一個列表
- 27. 如何在C#中創建一個排序的命令隊列?
- 28. 如何在C中創建一個字符串的md5散列?
- 29. 如何在C++中創建一個函數指針隊列
- 30. 如何在Python中創建一個給定的元素列表來創建另一個列表?
他說他自己學習而不是寫作業。我認爲添加作業標籤是不合理的,然後 – 2008-12-29 16:01:21
@litb - 同意。我只是調整了標籤。 – Roddy 2008-12-29 16:39:15
我們確實需要一個描述用戶何時需要代碼並且不是作業的標籤。我提名'plzsendtehcodez'。 – 2008-12-29 16:51:42