Создать новый стек со значениями из другого стека

362
07 марта 2018, 07:53

Создать стек с числами в диапазоне от –50 до +50. После создания стека выполнить индивидуальное задание. В конце работы все стеки должны быть удалены.

Индивидуальное задание: Создать новый стек, содержащий только те числа из первого стека, которые больше среднего значения всех элементов первого стека.

Вот мой код:

using namespace std;
struct Stack
{
    int info;
    Stack (*next);
}*begin1;
Stack* InStack(Stack*, int);
void View(Stack*);
void mima(Stack*);
int main()
{
    int i;
    for (i = 1; i <= 101; i++)
    {
        begin1 = InStack(begin1, rand() % 101 - 50);
    }
    View(begin1);
    mima(begin1);
    getchar();
}
Stack* InStack(Stack *p, int in){
    Stack *t = new Stack;
    t->info = in;
    t->next = p;
    return t;
}
void View(Stack *p)
{
    Stack *t = p;
    while (t != NULL)
    {
        cout « t->info « "\n";
        t = t->next;
    }
}
void mima(Stack *p)
{
    Stack *temp = p;
    int sum = 0, num = 0;
    cout « endl;
    while (temp != NULL)
    {
        num++;
        sum += temp->info;
        temp = temp->next;
    }
    sum /= num;
    temp = p;
    cout « "Count=" « sum « endl;
}
Answer 1
#include <iostream>
using namespace std;
struct Stack {
    int info;
    Stack (*next);
} *begin1, *second;
Stack *InStack(Stack *, int);
void View(Stack *);
void mima(Stack *, int &);
Stack *moreAverage(Stack *p, Stack *&second, int average);
int main() {
    int i; int average = 0;
    for (i = 1; i <= 101; i++) {
        begin1 = InStack(begin1, rand() % 101 - 50);
    }
    View(begin1);
    mima(begin1, average);
    cout << "average = " << average << endl;
    moreAverage(begin1, second, average);
    View(second);
}
Stack *moreAverage(Stack *p, Stack *&second, int average){
    Stack *t;
    while (p != NULL){
        if(p->info > average){
            Stack *tmp = new Stack;
            tmp->info = p->info;
            if(second == NULL){
                second = tmp;
                t = second; // запоминаем начало для нового списка
            } else{
                // добавляем новые элементы
                second ->next = tmp;
                second = second ->next;
            }
        }
        p = p->next;
    }
    second = t; // возвращаем указатель на начало, так как сейчас сылается на конец списка 
}
Stack *InStack(Stack *p, int in) {
    Stack *t = new Stack;
    t->info = in;
    t->next = p;
    return t;
}
void View(Stack *p) {
    Stack *t = p;
    while (t != NULL) {
        cout<< t->info << "\n";
        t = t->next;
    }
}
void mima(Stack *p, int &average) {
    Stack *temp = p;
    int sum = 0, num = 0;
    cout << endl;
    while (temp != NULL) {
        num++;
        sum += temp->info;
        temp = temp->next;
    }
    sum /= num;
    average = sum;
    temp = p;
    cout << "Count=" << sum << endl;
}

вывод

-21 -15 7 8 17 -25 19 -3 -6 -7 -1 36 14 -11 -8 -42 11 -33 -3 -1 37 -35 -4 -10 -4 18 13 -19 13 19 7 15 12 -24 6 -35 -45 28 -11 43 45 22 3 -14 38 29 50 -34 48 -32 -25 35 27 9 26 33 8 -27 -17 28 24 -38 -20 38 33 -3 30 17 31 -42 11 21 -1 -37 -28 11 29 -33 12 11 -23 49 25 -1 -45 -46 25 13 -21 -27 -13 19 28 -39 22 -35 -31 -9 -19 15 -9

Count=1 average = 1

7 8 17 19 36 14 11 37 18 13 13 19 7 15 12 6 28 43 45 22 3 38 29 50 48 35 27 9 26 33 8 28 24 38 33 30 17 31 11 21 11 29 12 11 49 25 25 13 19 28 22 15

READ ALSO
Перевод из десятичной СС в двоичную

Перевод из десятичной СС в двоичную

Добрый день, есть такой код, переводящий число из 10-й системы в 2-ю

270
CRT (c++) и unit test

CRT (c++) и unit test

Я недавно узнал, что можно проверять программу на предмет утечки памяти через метод _CrtDumpMemoryLeaks();Т

311
Поиск по ListActivity

Поиск по ListActivity

Как добавить ActionBar в ListActivity и сделать в нем SearchWidget, вернее выполнить поиск элементов по списку(как поиск в плей маркете)?

296
OAuth2 авторизация для Standalone

OAuth2 авторизация для Standalone

Все статьи про OAuth2, которые хоть как-то упоминают Standalone говорят лишь "перехватите как-нибудь код авторизации и отправьте POST запрос для получения...

241