2012-10-06 84 views
0

大家好,每個人都試圖將使用鏈接列表的C++程序轉換成使用結構數組的舊C程序。我是一個總的C++福利局和我在用C建立一個鏈表++的語法有點困惑....這裏是我的代碼:Array to LinkedList in C++

#include <iostream> 
#include <stdlib.h> 
#include <string> 
#include <ctype.h> 
#include <fstream> 

using namespace std; 


struct Video { 
char video_name[1024];  
int ranking;    // Number of viewer hits 
char url[1024];    // Video URL 
struct Video *next; // pointer to Video structure 
} 


struct Video* Collection = new struct Video; 
Collection *head = NULL;     // EMPTY linked list 

在我的舊程序Collection是的Video數組。我怎樣才能讓Collection成爲Video節點的鏈表?我目前收到錯誤,說最後兩行代碼說:expected initializer before 'Collection'expected constructor, destructor or type conversion before '*' conversion。我知道我的語法肯定是錯誤的,但我想我不明白如何創建集合中的視頻鏈表...

+2

如果你不知道如何實現一個鏈表,使用STL的List類 –

+2

**得到一本書!獲得一本書!! **這裏有一些幫助。 http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – DumbCoder

+2

@SidharthMudgal事實上,即使你*知道如何實現一個鏈表,STL的實體也會被測試,並進行了優化,並有很多有用的幫助功能,如std :: sort已經存在。除了學習練習外,還有*無理由寫自己的鏈表。 –

回答

2

C++的答案是:

struct Video { 
    std::string video_name;  
    int ranking;    // Number of viewer hits 
    std::string url;    // Video URL 
} 

std::list<Video> list_of_videos 
+1

同意 - 使用STL而不是從零開始執行 – HXCaine

+0

我同意。這裏有一個易於使用的鏈接:http://en.cppreference.com/w/cpp/container/list –

+0

真棒謝謝你們! – accraze

0

您已經將Collection定義爲指向視頻類型的變量。在下一行中,您將它視爲一種類型,這沒有意義。所有你需要的是:

Video *head = NULL; 

head代表鏈接列表。你不需要另一個變量。如果你真的想正確使用C++,我建議堅持使用數組解決方案,除非你的使用模式以某種方式保證鏈表語義。如果它是已知大小的數組,你有兩個選擇:

Video videos[N]; 
std::array<Video, N> videos; // Preferred in C++11 

否則,使用std::vector<T>

std::vector<Video> videos; 

如果真的必須是一個鏈表,可以考慮使用std::list<T>

std::list<Video> videos; 

在所有這些情況下,您應該忽略struct Video *next;