verkettete Liste



  • hallo,

    ich hab da ein kleines Problem mit verketteten Listen, wenn
    ich die Liste ausgebe sind die Werte in umgekehrter Reihenfolge
    so speichere ich die Liste:

    class C_m_Map
    {
    public:
    	float m_data;
    	std::string m_string;
        	C_m_Map *m_pNextElement;
    };
    
    pObjectElement=new C_m_Map; 
    pObjectElement->m_data = mObject.x;
    pObjectElement->m_pNextElement = m_anchor;
    m_anchor = m_anchor->m_pNextElement;
    

    Wie speichert man die Daten in der richtigen Reihenfolge?
    Oder vielleicht geb ich es Falsch aus:

    while( m_anchor->m_pNextElement != 0   )
    {
    	m_anchor = m_anchor->m_pNextElement;
    }
    


  • struct item
    {
        float data;
        std::string string;
        item* next;
        item(float data = 0.0f, std::string const& str = "") 
            : data(data), string(str), next(NULL)
        {}
    };
    
    class list
    {
        item* m_begin;
        item* m_curent;
    
    public:
        list() 
            : m_begin(NULL), m_curent(m_begin)
        {}
        ~list()
        { 
            item* tmp(m_begin);
            while (tmp != NULL)
            {    
                item* next(tmp->next);
                delete tmp;
                tmp = next;
            }
        }
    
        void push_back(item const& data)
        {
            item* tmp(m_begin == NULL ? m_begin : m_curent->next);
            m_curent = tmp = new item(data.data, data.string);
        }    
    };
    

    so könnte man das (grob) implementieren ... ist jetzt nicht überprüft, aber sollte gehen ...



  • und wie speichere ich in die Liste was rein, mit der push_back Funktion?Wozu
    ist die gut, die ist voll brutal zu verstehen besonders mit dem ? ist das ein Bit verschiebungs Ding oder das war irgenwas mit 3*if Operator.



  • Das ? zusammen mit : verhält sich so ähnlich wie ein einfaches if:

    tmp(m_begin == NULL ? m_begin : m_curent->next);
    //ist das gleiche wie
    if(m_begin == NULL)
        tmp(m_begin);
    else
        tmp(m_curent->next);
    

Anmelden zum Antworten