Analizuje program, ktory dodaje elementy do listy i je wyswietla.

Kod:
#include<iostream>
using namespace std;

struct link {
    int data;  //data item
    link* next; //pionter to next link
};


class linklist {
    private:
        link* first;
    public:
        linklist() {first = NULL;}
        void additem(int d);
        void display();
};

void linklist::additem(int d){
    link* newlink = new link;
    newlink->data = d;
    newlink->next = first;
    first = newlink; //now first pionts to this
}


void linklist::display() {
    link *current = first;
    while (current != NULL) {
        cout << current->data << endl;
        current = current->next; //move to next link
    }
}   

int main(){
    linklist li;

    li.additem(25);
    li.additem(23);
    li.additem(0);
    li.additem(64);

    li.display();
    return 0;
}
Niestety otrzymuje blad nastepujacej postaci:
Kod:
list.cpp:12:9: error: must use 'struct' tag to refer to type 'link' in this scope
        link* first;
        ^
        struct
list.cpp:20:11: error: use of undeclared identifier 'newlink'
    link* newlink = new link;
          ^
list.cpp:20:25: error: expected a type
    link* newlink = new link;
Mam rowniez pytanie do niektorych miejsc w programie.

O ile dobrze rozumiem listy, to opieraja sie one na wezlach. Kazdy wezel posiada dokladnie jeden element listy, oraz adresy nastepnego i poprzedniego elementu (w moim kodzie tylko nastepnego).

Kazdy element listy w powyzszym kodzie jest tworzony za pomoca new. Czy jest to konieczne? Czy w przeciwnym wypadku bedzie zabierac az tak bardzo duzo pamieci? Czy nie musimy gdzies uzyc delete?

Dlaczego next musi byc typu link?

Bede niezmiernie wdzieczna za pomoc.