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

question-closed problem z usunieciem Ciagu z jednego elementu

0 głosów
523 wizyt
pytanie zadane 24 kwietnia 2023 w C i C++ przez martinez369 Użytkownik (520 p.)
zamknięte 2 maja 2023 przez martinez369

funkcję usun usuwającą ze sznura ciągi sąsiednich elementów sznura w następujący sposób:
usuwamy najdłuższy możliwy przynajmniej 2-elementowy ciągły fragment wartości z których każda jest
o 1 mniejsza od poprzedniej(jeśli taki fragment istnieje w danym miejscu),pomijamy
fragment wartości różniącuch się o 1, pomijamy K elementów itd.(K jest liczbą całkowitą dodatnią będącą parametrem funkcji).Pamieć
zajmowania przez usuwanie elementy ma zostać zwolniona. funkcja nie może używać tablic,pomocniczych sznurów ani struktur dancyh
dostepnych w biblioteve standarowej(wektorów,list,kolejek,itp);

void sznur::usun(int K)
{
    Node*zaszuk=nullptr;
    Node*szuk=pocz;
    while(szuk!=nullptr)
    {
        while(szuk->nast!=nullptr && szuk->nast->dane==szuk->dane-1)
        {
            Node*killer=szuk;
            szuk=szuk->nast;
            if(zaszuk==nullptr)
            {
                pocz=szuk->nast;
            }
            else
            {
                zaszuk->nast=szuk->nast;
            }
            delete killer;
            ileJest--;
        }
        if(szuk==nullptr)
        {
            return;
        }
        for(int i=0;i<K;i++)
        {
            if(szuk->nast==nullptr)
            {
                return;
            }
            zaszuk=szuk;
            szuk=szuk->nast;
            if(szuk->nast==nullptr)
            {
                return;
            }
        }
    }
}
//8 7 6 5 3 3 3 2 1 1 1 1 K=2
//10 9 8 7 6 5 K dowolne
//9 7 6 6 6 6 5 3 3 1 K=1

pytanie brzmi dla sznura 8 7 6 5 3 3 3 2 1 1 1 1 powinno wyswietlać 3 3 1 1 1 a wyświetla 3 3 3 1 1 1  gdzie może być problem

komentarz zamknięcia: zadanie rozwiązane samodzielnie

1 odpowiedź

0 głosów
odpowiedź 25 kwietnia 2023 przez j23 Mędrzec (195,240 p.)
#include <iostream>


struct Node {
    int value;
    Node* next;
};


void usun(Node** pocz, int K) 
{
    Node *n0 = nullptr;
    Node* n1 = *pocz;
    
    while (n1) {
        Node* n2 = n1;
        
        while (n2->next && n2->value - n2->next->value == 1) {
            n2 = n2->next;
        }

        if(n1 == n2) {
            for (int i = 0; n1 && i < K; ++i) {
                n0 = n1;
                n1 = n1->next;
            }            
            continue;
        }

        if (n2) n2 = n2->next;
        if(n1 == *pocz) *pocz = n2;
        
        while (n1 != n2) {
            Node* p = n1->next;
            if(n0) n0->next = p;
            delete n1;
            n1 = p;
        }
    }
}


int main(void)
{
    int tab[10] = { 9, 7, 6, 6, 6, 6, 5, 3, 3, 1 }; 
    //int tab[6] = { 10, 9, 8, 7, 6, 5 };
    //int tab[12] = { 8, 7, 6, 5, 3, 3, 3, 2, 1, 1, 1, 1 };
    Node* list;
    Node* p = nullptr;
    
    for (int v : tab) {
        if(!p) list = p = new Node { v, nullptr };
        else { p->next = new Node { v, nullptr }; p = p->next; }
    }
    
    usun(&list, 1);
    
    while (list) {
        std::cout << list->value << ' ';
        Node* p = list;
        list = list->next;
        delete p;
    }
}

O to chodzi?

 

Podobne pytania

0 głosów
0 odpowiedzi 785 wizyt
pytanie zadane 19 stycznia 2019 w C i C++ przez profsor500 Użytkownik (610 p.)
0 głosów
2 odpowiedzi 1,430 wizyt
0 głosów
2 odpowiedzi 414 wizyt
pytanie zadane 3 czerwca 2018 w C i C++ przez Roman1212 Początkujący (460 p.)

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,786 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...