• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Lista Dwu kierunkowa własna implementacja

–1 głos
54 wizyt
pytanie zadane 11 stycznia w C i C++ przez użytkownika famousghost Nowicjusz (190 punkty)
zamknięte 11 stycznia przez użytkownika famousghost

Dzień dobry chciałem się zapytać czy ta implementacja listy dwu kierunkowej jest ok czy może jest tutaj jakiś błąd na papierze wydaje się ok, ale chciałbym opinii lepszych programistów :). Lista jest rozrzucona na 2 pliki

plik LISTA_DWU_KIERUNKOWA.cpp

#include "LISTA_DWU_KIERUNKOWA.h"

int node::licznik=0;

node::node()
{
    head=0;
    tail=0;
    next=0;
    prev=0;
    data=0;
}

node::~node()
{

}

void node::PUSH_TO_FRONT(int number)
{
    node * n = new node();
    n->data=number;
    if(head==0 && tail==0)
    {
        head = n;
        tail = n;
        licznik++;
    }
    else
    {
        node * tmp = head;
        head->prev = n;
        head = head->prev;
        head->next = tmp;
        head->prev = 0;
        licznik++;
    }
}

void node::PUSH_TO_BACK(int number)
{
    node * n = new node();
    n->data = number;
    if(tail==0 && head==0)
    {
        head = n;
        tail = n;
        licznik++;
    }
    else
    {
        node * tmp = tail;
        tail->next=n;
        tail = tail->next;
        tail->prev = tmp;
        tail->next = 0;
        licznik++;
    }

}

void node::POP_FROM_FRONT()
{
    if(licznik>1)
    {
        cout<<"USUWAM ELEMENT Z POCZATKU LISTY: "<<head->data<<endl;
        node * tmp = head;
        head = head->next;
        delete tmp;
        head->prev = 0;
        licznik--;
        Sleep(2000);
    }
    else if(licznik==1)
    {
        cout<<"USUWAM ELEMENT Z POCZATKU LISTY: "<<head->data<<endl;
        delete head;
        delete tail;
        head = 0;
        tail = 0;
        licznik--;
        Sleep(2000);
    }
    else
    {
        cout<<"LISTA JEST PUSTA"<<endl;
        Sleep(2000);
    }

}

void node::POP_FROM_BACK()
{
    if(licznik>1)
    {
        cout<<"USUWAM ELEMENT Z KONCA LISTY: "<<tail->data<<endl;
        node * tmp = tail;
        tail = tail->prev;
        delete tmp;
        tail->next = 0;
        licznik--;
        Sleep(2000);
    }
    else if(licznik==1)
    {
        cout<<"USUWAM ELEMENT Z KONCA LISTY: "<<tail->data<<endl;
        delete head;
        delete tail;
        head = 0;
        tail = 0;
        licznik--;
        Sleep(2000);
    }
    else
    {
        cout<<"LISTA JEST PUSTA"<<endl;
        Sleep(2000);
    }
}



void node::Write()
{
    system("CLS");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),14);
    node * tmp = head;
    cout<<"------------------------------------------------------------"<<endl;
    while(tmp)
    {
        cout<<tmp->data<<" ";
        tmp = tmp->next;
    }
    cout<<endl<<"------------------------------------------------------------"<<endl<<endl<<endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
}

void node::SIZES()
{
    cout<<"ROZMIAR TABLICY TO: "<<licznik<<endl;
    Sleep(2000);
}

void node::IS_EMPTY()
{
    if(licznik==0)
    {
        cout<<"CZY LISTA JEST PUSTA: "<<"TAK"<<endl;
        Sleep(2000);
    }
    else
    {
        cout<<"CZY LISTA JEST PELNA: "<<"NIE"<<endl;
        Sleep(2000);
    }
}

void node::Clear_LISTS()
{
    node * tmp = head;
    while(tmp)
    {
        tmp = tmp->next;
        cout<<"USUWAM: "<<head->data<<endl;
        delete head;
        head = tmp;
    }
    delete next;
    delete prev;
    delete tail;
    delete head;
    delete tmp;

}
void Lista_Dwu_Kierunkowa()
{
    node * Lista_Dwukierunkowa = new node();
    int wybor,liczba;
    while(wybor!=7)
    {
        Lista_Dwukierunkowa->Write();
        cout<<"MENU"<<endl;
        cout<<"1 - Push_Front\n2 - Push_Back\n3 - Pop_Front\n4 - Pop_Back\n5 - Size\n6 - IS_EMPTY?\n7 - FINISH\n\n\n";
        cin>>wybor;
        switch(wybor)
        {
            case 1:
                cout<<"JAKA LICZBE CHCESZ DODAC NA POCZATEK LISTY: ";
                cin>>liczba;
                Lista_Dwukierunkowa->PUSH_TO_FRONT(liczba);
                cout<<endl;
                break;
            case 2:
                cout<<"JAKA LICZBE CHCESZ DODAC NA KONIEC LISTY: ";
                cin>>liczba;
                Lista_Dwukierunkowa->PUSH_TO_BACK(liczba);
                cout<<endl;
                break;
            case 3:
                Lista_Dwukierunkowa->POP_FROM_FRONT();
                break;
            case 4:
                Lista_Dwukierunkowa->POP_FROM_BACK();
                break;
            case 5:
                Lista_Dwukierunkowa->SIZES();
                break;
            case 6:
                Lista_Dwukierunkowa->IS_EMPTY();
                break;
            case 7:
                cout<<"KONCZE..."<<endl;
                break;
            default:
                cout<<"ZLY NUMER PODAJ INNY"<<endl;
                break;
        }

    }
    Lista_Dwukierunkowa->Clear_LISTS();
    delete Lista_Dwukierunkowa;
}


 

plik LISTA_DWU_KIERUNKOWA.h

#include <iostream>
#include <windows.h>

using namespace std;

class node
{
    node * head;
    node * tail;
    node * next;
    node * prev;
    int data;
    static int licznik;
public:
    node();

    ~node();

    void PUSH_TO_FRONT(int number);


    void PUSH_TO_BACK(int number);


    void POP_FROM_FRONT();


    void POP_FROM_BACK();


    void SIZES();


    void Write();


    void IS_EMPTY();

    void Clear_LISTS();

};

void Lista_Dwu_Kierunkowa();

 

plik main.cpp

#include "LISTA_DWU_KIERUNKOWA.h"



int main()
{
    Lista_Dwu_Kierunkowa();
    return 0;
}

 

komentarz zamknięcia: odpowiedz
6
komentarz 11 stycznia przez użytkownika playerony Stary wyjadacz (14,120 punkty)
komentarz 11 stycznia przez użytkownika K0XM4N Bywalec (2,290 punkty)
Edytuj pytanie i wrzuć kod jako fragment kodu, albo wrzuć na pastebin'a
1
komentarz 11 stycznia przez użytkownika playerony Stary wyjadacz (14,120 punkty)
Raczej wszystko wygląda dobrze, o ile nic mi nie umknęło ;) I no nie wiem ale te Sleep'y wszędzie mnie tylko irytowały.
komentarz 11 stycznia przez użytkownika famousghost Nowicjusz (190 punkty)
Dzięki za odpowiedź sleepy były po to żeby można było komunikat zobaczyć :). Czyli ok dzięki :D za sprawdzenie :)

Podobne pytania

+2 głosów
1 odpowiedź 182 wizyt
+1 głos
1 odpowiedź 123 wizyt
pytanie zadane 21 maja 2015 w C i C++ przez użytkownika Radfler Szeryf (93,640 punkty)
0 głosów
1 odpowiedź 67 wizyt
pytanie zadane 11 marca 2016 w Python, Django przez użytkownika ZakosiliMiNeta Nałogowiec (29,280 punkty)
...