Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
1 / 1 / 0
Регистрация: 10.11.2018
Сообщений: 107
1

Добавить две сортировки однонаправленных списков в код

21.03.2019, 18:53. Показов 159. Ответов 0

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
 
using namespace std;
 
struct Stack {
    int inf;
    Stack *next, *Head;   //указатель типа стек на след элемент и на вершину
};
 
void push(int inf, Stack *StackPointer) {  //ввод *& указатель на стек
    Stack *temp = new Stack;  //выдел память для нового элемента
    temp->inf = inf;  //записываем необход число в инф
    temp->next = StackPointer->Head;  //кладем элемент на вершину стека
    StackPointer->Head = temp;  //вершина теперь новый элемент 
}
 
void Show(Stack *StackPointer) {               //показывает
    Stack *temp = StackPointer->Head; //устанавливает указатель на вершину 
    while (temp != NULL) {  //пока не пуст
        cout << temp->inf << " "; //выводим на экран данные ячейки стека
        temp = temp->next; //передвигаем на след элемент
    }
}
 
double AverageValue(int n, Stack *StackPointer) {    //среднее значение
    Stack *temp = StackPointer->Head;  //указатель на вершину
    double amount = 0;  //изначально среднему даем значение 0
    while (temp != NULL) {  //если не пуст
        amount += temp->inf;  //считает сумму
        temp = temp->next; //переход на след 
    }
    return amount / n;  //сумма делить на количество
}
 
void pop(Stack *StackPointer) {                           //удаление
    while (StackPointer->Head != NULL) {    //если вершина не пустая
        Stack *temp = StackPointer->Head->next;   // указатель темп на след элемент
        delete StackPointer->Head; //удаляем вершину стека
        StackPointer->Head = temp;// присваиваем новой голове стека темп (меняем адрес на след элемент)
    }
}
 
void StackOfNumbers(int n, Stack *StackPointer, Stack *NewStack) {    //второй стек 
    double AverageNumb = AverageValue(n, StackPointer);
    Stack *temp = StackPointer->Head;  //указатель на вершину
    while (temp != NULL) {   //если не пустой
        if ((temp->inf) > AverageNumb) {  //элемент ячейки больше среднего
            push(temp->inf, NewStack);   //записываем в новый стек
        }
        temp = temp->next;   // передвиг на след элемент
    }
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    int n, elem;
    cout << "Введите размер стека: ";
    cin >> n;
    Stack *NewStack = new Stack;  // обЪявление невстек и стекпоинетр типы данных сте(память под них)
    Stack *StackPointer = new Stack;
    StackPointer->Head = NULL; //в первый элемент записываем 0
    NewStack->Head = NULL;  //тож самое записываем 0
    while (true) {
        cout << endl;
        cout << "1. Ввести элементы 2. Показать 3. Идз 4. Сортировка #1 5. Сортировка #2" << endl;
        int v; cin >> v;
        switch (v)
        {
        case 1:     for (int i = 0; i < n; i++) {
            cout << "Введите элемент стека: ";
            cin >> elem;
            push(elem, StackPointer);
        } break;
        case 2: Show(StackPointer); break;
        case 3:     cout << endl;
            cout << "Среднее значение всех элементов стека = " << AverageValue(n, StackPointer) << endl;
            StackOfNumbers(n, StackPointer, NewStack);
            Show(NewStack); break;
        case 4: Sort_p(Head); break;
        case 5: Sort_info(Head); break;
        default: return 2;
        }
    }
    //Show(StackPointer);
    //cout << endl;
    //cout << "Среднее значение всех элементов стека = " << AverageValue(n, StackPointer) << endl;
    //StackOfNumbers(n, StackPointer, NewStack);
    //Show(NewStack);
    pop(StackPointer);
    pop(NewStack);
    delete NewStack->Head;
    delete NewStack;
    delete StackPointer->Head;
    delete StackPointer;
    system("pause");
}
Сортировки которые нужно добавить в код (и вызвать их в 4 и 5 кейсе):
1.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Sort_p(Stack **p) {
    Stack *t = NULL, *t1, *r;
    if ((*p) -> next -> next == NULL) return;
    do {
            for (t1=*p; t1-> next->next  != t; t1=t1-> next)
                if (t1->next->info  >  t1-> next-> next-> info){
                            r = t1->next->next;
                            t1 -> next -> next = r -> next;
                            r-> next =t1-> next;
                            t1-> next = r;
                }
            t= t1-> next;
    } while ((*p)-> next -> next != t);
}
2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Sort_info(Stack *p) {
    Stack *t = NULL, *t1;
    int r;
    do {
            for (t1=p; t1 -> next != t; t1 = t1-> next)
                if (t1-> info > t1-> next -> info)  {
                                r = t1-> info;
                                t1-> info = t1-> next -> info;
                                t1-> next -> info = r;
                    }
            t = t1;
    } while (p -> next != t);
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2019, 18:53
Ответы с готовыми решениями:

Обработка линейных однонаправленных списков
Описать процедуру, удаляющую из списка L слова, заканчивающиеся заданной буквой. чем можите

Слияние однонаправленных динамических списков
Задачка ТурбоПаскаль: Слить 2 списка (оба- возрастающая последовательность целых чисел) в третий...

Из двух однонаправленных списков сформировать новый список
Из двух однонаправленных списков сформировать новый список, следующим образом: сначала записать...

Сравнение элементов двух однонаправленных линейных списков
А как сравнить элементы двух списков? Чтобы при совпадении элементов счётчик прибавлял единичку?...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2019, 18:53

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Создание, вывод и обработка линейных однонаправленных списков
Задача описать процедуру: 1)создания динамического линейного списка, выбирая числа из текстового...

Организовать представление множеств в виде линейных однонаправленных списков
Даны два множества А и В. Организовать представление множеств в виде линейных однонаправленных...

Реализация алгоритма Рабина-Карпа для двух однонаправленных линейных списков
Здравствуйте! Собственно, вопрос находится в заголовке: у меня описано два списка, надо этим...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.