Lista, wyswietlenie

0
 #include <iostream>

using namespace std;

class link
{
public:
    int value;
    link *next;
    link(int v):value(v),next(NULL){}
    void add(int val)
    {
        link *temp=this;
        while(temp->next)
            temp=temp->next;
        temp->next=new link(val);
    }
    void show()
    {
        link *temp=this;
        while(temp)
        {
            cout << value << " ";
            temp=temp->next;
        }
    }
};

int main()
{
    link *root=new link(0);
    int tab[8]={5,2,4,3,7,8,1,0};
    for(int i=0;i<8;i++)
        root->add(tab[i]);
    root->show();
    return 0;
}

Dlaczego mi tu same 0 wyskakują? Chciałbym tu wyświetlić listę, ale mi nie działa.

2

Wyświetlasz cały czas to co jest w elemencie root. Spróbuj tak:

cout << temp->value << " ";
2
  1. Zlikwiduj smrodek przy inkrementacji: http://4programmers.net/Forum/1101404
  2. Twoje dodawanie ma koszt O(n) - więc dodanie n-elementów będzie miało koszt O(n2) więc ma sens zrobić jedno z dwóch podejść: A) zrobić normalną klasę list zawierającą wskaźniki head i tale więc dodawanie jednego elementu będzie mieć koszt O(1) B) dodawać na początek, przed wyświetleniem zrobić inwersję w miejscu, po wyświetleniu również, więc dodawanie jednego elementu znowu będzie mieć koszt O(1), koszt wyświetlenie nadał będzie mieć koszt O(n) będzie jedyne nieznacznie dłuższy.
  3. for jest tu bardziej na miejscu:
void show() { for(link *i=this;i;i=i->next) cout<<i->value<<" "; }

1 użytkowników online, w tym zalogowanych: 0, gości: 1