C ++中的LinkedList数组

时间:2012-10-06 23:58:57

标签: c++ linked-list

大家好,每个人都试图将使用结构数组的旧C程序翻译成使用链表的C ++程序。我是一个完整的C ++ newb,我对在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。我知道我的语法肯定是错误的,但我想我不明白如何在Collection中创建视频的链接列表......

2 个答案:

答案 0 :(得分: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 :(得分:0)

您已将Collection定义为指向视频的类型变量。在下一行,你将它视为一种类型,这是没有意义的。所有你需要的是:

Video *head = NULL;

head代表链接列表。你不需要另一个变量。

OTOH,如果你真的想要正确使用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;