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

Lista dwukierunkowa.

Mały hosting, OGROMNE możliwości
+4 głosów
905 wizyt
pytanie zadane 4 kwietnia 2015 w C i C++ przez Marcin Chmiel Obywatel (1,330 p.)

Czesc mam problem taki, ze program sie wysypuje po usunieciu ostatniego elementu z listy. Np. dodam jakies 4 liczby i gdy usune wszystkie 4 petla sie wysypuje. Prosze o pomoc
Kod programu:

 

#include<iostream>
#include<cstdio>
#include<cstdlib>

using namespace std;

struct node
{
    int info;
    struct node *next;
    struct node *prev;
}*start;

void stworzListe(int wartosc)
{
    struct node *s, *temp;
    temp=new(struct node);
    temp->info=wartosc;
    temp->next=NULL;
    if(start==NULL)
    {
        temp->prev=NULL;
        start=temp;
    }
    else
    {
        s=start;
        while(s->next!=NULL)
            s=s->next;
        s->next=temp;
        temp->prev=s;
    }
}

void dodajLiczbe(int wartosc)
{
    if (start==NULL)
    {
        cout<<"Wpierw stworz liste!"<<endl;
        return;
    }
    struct node *temp;
    temp = new(struct node);
    temp->prev=NULL;
    temp->info=wartosc;
    temp->next=start;
    start->prev=temp;
    start=temp;
    cout<<"Liczbe wstawiono"<<endl;
}

void dodajPo(int wartosc, int pos)
{
    if (start==NULL)
    {
        cout<<"Wpierw stworz liste!"<<endl;
        return;
    }
    struct node *tmp, *q;
    int i;
    q=start;
    for (i=0;i<pos-1;i++)
    {
        q=q->next;
        if(q==NULL)
        {
            cout<<"Jest mnie niz ";
            cout<<pos<<" liczb elementow"<<endl;
            return;
        }
    }
    tmp=new(struct node);
    tmp->info=wartosc;
    if (q->next==NULL)
    {
        q->next=tmp;
        tmp->next=NULL;
        tmp->prev=q;
    }
    else
    {
        tmp->next=q->next;
        tmp->next->prev=tmp;
        q->next=tmp;
        tmp->prev=q;
    }
    cout<<"Liczbe wstawiono"<<endl;
}

void usun(int wartosc)
{
    struct node *tmp, *q;
    if (start->info==wartosc)
    {
        tmp=start;
        start=start->next;
        start->prev=NULL;
        cout<<"Liczbe usunieto"<<endl;
        free(tmp);
        return;
    }
    q=start;
    while (q->next->next!=NULL)
    {
        if (q->next->info==wartosc)
        {
            tmp=q->next;
            q->next=tmp->next;
            tmp->next->prev=q;
            cout<<"Liczbe usunieto"<<endl;
            free(tmp);
            return;
        }
        q=q->next;
    }
    if (q->next->info==wartosc)
    {
        tmp=q->next;
        free(tmp);
        q->next=NULL;
        cout<<"Liczbe usunieto"<<endl;
        return;
    }
    cout<<"Liczby "<<wartosc<<" nie znaleziono"<<endl;
}

void wyswietl()
{
    struct node *q;
    if (start==NULL)
    {
        cout<<"Lista jest pusta"<<endl;
        return;
    }
    q=start;
    cout<<"Elementy listy: "<<endl;
    while (q!=NULL)
    {
        cout<<q->info<<" ";
        q=q->next;
    }
    cout<<"NULL"<<endl;
}

int main()
{
    int wybor, element, pozycja;
    while (1)
    {
        cout<<endl<<"----------------------------"<<endl;
        cout<<endl<<"MENU"<<endl;
        cout<<endl<<"----------------------------"<<endl;
        cout<<"1.Wstaw do wierzcholka listy"<<endl;
        cout<<"2.Wstaw na poczatek"<<endl;
        cout<<"3.Wstaw po liczbie elementow"<<endl;
        cout<<"4.Skasuj"<<endl;
        cout<<"5.Wyswietl"<<endl;
        cout<<"6.Koniec"<<endl;
        cout<<"Wpisz swoj wybor z MENU: ";
        cin>>wybor;
        switch (wybor)
        {
        case 1:
            cout<<"Wpisz liczbe: ";
            cin>>element;
            stworzListe(element);
            cout<<endl;
            break;
        case 2:
            cout<<"Wpisz liczbe: ";
            cin>>element;
            dodajLiczbe(element);
            cout<<endl;
            break;
        case 3:
            cout<<"Wpisz liczbe: ";
            cin>>element;
            cout<<"Za ktora liczba elementow wstawic?: ";
            cin>>pozycja;
            dodajPo(element, pozycja);
            cout<<endl;
            break;
        case 4:
            if (start == NULL)
            {
                cout<<"Lista jest pusta"<<endl;
                break;
            }
            cout<<"Wybierz element do skasowania: ";
            cin>>element;
            usun(element);
            cout<<endl;
            break;
        case 5:
            wyswietl();
            cout<<endl;
            break;
        case 6:
            exit(1);
        default:
            cout<<"Zly wybor"<<endl;
        }
    }
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 4 kwietnia 2015 przez achilles147 Dyskutant (9,580 p.)
błąd wyskakuje w linijce

void usun(int wartosc)

{

....

start->prev=NULL;

....

}

Podobne pytania

0 głosów
1 odpowiedź 755 wizyt
pytanie zadane 18 czerwca 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 400 wizyt
pytanie zadane 2 maja 2020 w C i C++ przez Rrafał98 Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 129 wizyt
pytanie zadane 5 lutego 2020 w Algorytmy przez Mariusz M Obywatel (1,670 p.)

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,259 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...