Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Задача за стек с c++

Featured Replies

Здравейте! Имам следното условие "Да се състави програма, която създава динамичен стек S, след което установява N–я от дъното елемент в стойност A, като изключва от стека първите N-1 от дъното елемента." Проблема ми е, че в програмата, която аз съм написал елементите се запазват, а в условието се иска да се махне N-1 елемент от дъното. Също така не трябва да използвам STL библиотека. Ще ви бъда благодарен ако някой може да ми помогне!

Ето следната програма, която аз съм написал:

#include<iostream>
using namespace std;
int br = 0;

struct elem
{
    int key;
    elem *next;
}*s1 = NULL, *p, *s2 = NULL;
void push(int n, elem *&start);
int pop(int& n, elem *&start);
void insert();

void insert()
{
    int n = 1;

    while (n != 0)  // 0 za izhod
    {
        cout << "\n Vuvedi cifra: ";
        cin >> n;
        if (n != 0) push(n, s2);
    }

    cout << endl;
}

void push(int n, elem*& start)
{
    p = start;
    start = new elem;
    start->key = n;
    start->next = p;
    br++;
}

int pop(int& n, elem*& start)
{
    if (start)
    {
        n = start->key;
        p = start;
        start = start->next;
        delete p;
        return 1;
    }
    else
    {
        return 0;
    }
}

void main()
{
    insert();
    int N, a, i;
    do
    {
        cout << "\n Vuvedi chislo mejdu 1 i " << br << "!" << endl;
        cout << " N= ";
        cin >> N;

    } while (N<1 && N>br);

    for (i = 1; i < N; i++)
    {
        pop(a, s2);
        push(a, s1);
    }
    cout << "\n Vuvedi nova stoinost " << endl;
    cout << " A=  ";
    cin >> a;
    s1->key = a;
while (pop(a, s2))
        push(a, s1);

while (pop(a, s1))
cout << " " << a << "\t";
}

Маха всички елементи от дъното на стека до n-1-я  не е като да махне само n-1-я.

начина по който задаваш pop() функцията не е удобен за ползване затова съм я променил.

#include<iostream>

using namespace std;

struct elem
{
    int key;
    elem *next;
};

void push(int n, elem*& start)
{
    elem *p = start;
    start = new elem;
    start->key = n;
    start->next = p;
}

int pop(elem*& start)
{
    elem *p=start;
    int n = start->key;
    start = start->next;
    delete p;
    return n;
}




int main()
{
    elem *s1=NULL, *s2=NULL, *p;
    int N, a, br=0;
    
    while (1) 
    {
        cout << "\n Vuvedi cifra: ";
        cin >> a;
        if (a==0) break;
        push(a, s2);
        br++;
    }
    cout << endl;
    
    
    do
    {
        cout << "\n Vuvedi chislo mejdu 1 i " << br << "!" << endl;
        cout << " N= ";
        cin >> N;

    } while (N<1 && N>br);

    for (int i = 1; i < N; i++)
    {
        push(pop(s2),s1);
    }
    cout << "\n Vuvedi nova stoinost " << endl;
    cout << " A=  ";
    cin >> a;
    while (s2) pop(s2);  
    push(a,s2);
    while (s1) push(pop(s1),s2);
    
    while (s2) 
        cout<<pop(s2)<<"   ";
    cout<<endl;    
} 

 

    for (int i = N; i < br; i++)
    {
        push(pop(s2),s1);
    }

 

В първоначално пуснатия код съм забравил да коригирам for цикъла

  • Автор

@inedБлагодаря ви много, само има един проблем и той е че в условието искат числата да се извеждат така 20 30 40 100, а не 70 50 40 100(както е дадено на снимката) ако ме разбрахте. Много тъпо условие и абсолютно тъпи изисквания се искат..

image.png.5579f63e7618dbb0a225eb664151d60b.png

 

Напиши точното условие на задачата, щото в първия пост нищо такова не пише

Имаш ли два стека може да си ги прехвърляш елементите в какъвто ред си искаш, но просто в условието от първия ти пост няма нищо общо с това което сега пишеш, иначе да - никакъв проблем да се променят малко циклите и да ти ги изкарва числата изкарва както искаш

  • Автор

@ined Ами значи, когато въвеждаме произволни елементи например:

Vuvedi cifra: 10

Vuvedi cifra: 20

Vuvedi cifra: 30

Vuvedi cifra: 50

Vuvedi cifra: 70

Vuvedi cifra: 90

Vuvedi cifra: 0

 Vuvedi chislo mejdu 1 i 6!

N= 2 (тук избирам да променя втория елемент от дъното на стека тоест трябва да се промени 70)

 Vuvedi nova stoinost
 A= 80 (тук вече 70 трябва да стане 80 и 90 да се махне от стека)

И следователно стека трябва да изглежда така :

10 20 30 50 80 

А ако реша N=3(с N=3 избирам да променя третия елемент от дъното на стека) и А=80 трябва стека да изглежда така:

10 20 30 80

А ако е N=4 и А=80 следователно стека ще изглежда така:

10 20 80

Надявам се да съм обяснил както трябва. Благодаря предварително!

Бъркаш дъно на стека и връх на стека, дъното на стека е все едно когато е празен както в началото,

първия елемент над дъното ти е 10, втория - 20 и т.н.

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Публикацията ви съдържа термини, които не допускаме! Моля, редактирайте съдържанието си и премахнете подчертаните думи по-долу. Ако замените букви от думата със звездички или друго, за да заобиколите това предупреждение, профилът ви ще бъде блокиран и наказан!
Напишете отговор в тази тема...

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.