• 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

Object Storage Arubacloud
–1 głos
157 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez famousghost Początkujący (430 p.)
zamknięte 11 stycznia 2017 przez 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 2017 przez playerony Pasjonat (15,240 p.)
komentarz 11 stycznia 2017 przez K0XM4N Gaduła (3,640 p.)
Edytuj pytanie i wrzuć kod jako fragment kodu, albo wrzuć na pastebin'a
1
komentarz 11 stycznia 2017 przez playerony Pasjonat (15,240 p.)
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 2017 przez famousghost Początkujący (430 p.)
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

–1 głos
1 odpowiedź 569 wizyt
pytanie zadane 24 października 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 683 wizyt
pytanie zadane 10 czerwca 2018 w C i C++ przez Kamil Miętkiewicz Użytkownik (630 p.)
0 głosów
2 odpowiedzi 739 wizyt
pytanie zadane 8 lipca 2018 w C i C++ przez niezalogowany

92,550 zapytań

141,393 odpowiedzi

319,520 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...