0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 56
1

Организация очереди в виде пирамиды

29.06.2018, 14:31. Показов 1404. Ответов 5
Метки нет (Все метки)

Здравствуйте! Помогите пожалуйста,написать пирамидальную сортировку,чтобы элементы строились в виде пирамиды,а не от наибольшего к наименьшему. Обошел весь интернет,а сортировка как таковую я не смог найти. Нашел пирамидальные сортировки в интернете,но везде почему то элементы строятся от наименьшего до наибольшего,либо наоборот.
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
#include <cstdlib>
#include <iostream>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include "func.h"
 
using namespace std;
 
int main()
{
     char *nameFile;
    system ("chcp 1251"); 
    FILE*f;
    f = fopen ("12345.txt","rb");
    if (f==NULL) 
    {
        printf ("файл не найден...\n");
        system("pause");
        exit(0);
    }
   Node *FIFO = NULL;
   int i,n,a[10],a1,v,n1,n2,max;
   char m;
   fscanf(f,"%d",&n); //количества элементов в массиве
   printf("количество переменных: %d \n", n );
   printf("очередь: " );
   for (i=0; i<n;i++) 
   {
    fscanf(f,"%d",&n1);
    FIFO = Add_Q(FIFO,n1); 
   } 
    Show(FIFO);
    printf("\n");
    printf("введите число для удаления " );
    scanf("%d",&n1);
    Delete(n1 ,&FIFO);
    printf("очередь: " );
    Show(FIFO);
    printf("\n");
    printf("введите переменную, которую хотите добавить в очередь: " );
    scanf("%d",&n1);
    FIFO = Add_Q(FIFO,n1);    
    printf("очередь: " );
    Show(FIFO);
    printf("\n");
    max=MAX(FIFO);
    printf("max= %d \n",max );
    Delete(max ,&FIFO);
    printf("очередь: " );    Show(FIFO);
    printf("\n");
    printf("введите переменную, которую хотите изменить и на какое число: " );
    scanf("%d",&n1);
    scanf("%d",&n2);
    swap(n1,n2,&FIFO);
    Show(FIFO);
    system("PAUSE");
    return EXIT_SUCCESS;
}
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
#include <cstdlib>
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include "func.h"
 
 
Node *Add_Q (Node *Top, int d) {
    Node *newel = (Node*)malloc(sizeof(Node));
    newel->data=d;
    newel->next = NULL;
    if (Top==NULL) return newel;
    Node *temp = Top;
    while (temp->next)
        temp = temp->next;
    temp->next=newel;
    return Top;
}
 
void swap(int p, int p1, Node **Top) {
    if (*Top == NULL) {
        return;
    }
    if ( (*Top)->data==p ) {
        (*Top)->data=p1;
        swap(p, p1, Top);
    } else {
        swap(p, p1 ,&((*Top)->next));
    }
 
}
int MAX( Node *Top) {
    int max;
    max=(Top->data);
    Top = Top->next;
    while (Top) {
        if (max<(Top->data) ) {
            max=Top->data;
        }
        Top = Top->next;
    }
    return max;
}
void Show (Node *Top) {
    while (Top) {
        if (Top->next) printf ("%3d", Top->data);
        else printf("%3d \n",Top->data);
        Top = Top->next;
    }
}
void Delete (int p, Node **Top)
 
{
    if (*Top == NULL) {
        return;
    }
    if ( (*Top)->data==p ) {
        Node *temp = (*Top);
        (*Top) = (*Top)->next;
        free(temp);
        Delete(p, Top);
    } else {
        Delete(p ,&((*Top)->next));
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2018, 14:31
Ответы с готовыми решениями:

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

Списки, очереди, стеки, деревья, пирамиды - нужен пример демонстрации
Я в своем учебнике не увидел примера реальных ситуаций, в которых нужно использовать списки,...

Организация очереди
Добрый день. Передомной постала задача в организации очереди, посмотрел я здесь, попробывал...

Организация очереди работы с БД
Здравствуйте! Есть написанная программа которая редактирует, добавляет и удаляет поля в БД mysql...

5
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 933
29.06.2018, 18:27 2
Лучший ответ Сообщение было отмечено fishki123 как решение

Решение

Цитата Сообщение от fishki123 Посмотреть сообщение
Помогите пожалуйста,написать пирамидальную сортировку,чтобы элементы строились в виде пирамиды,а не от наибольшего к наименьшему.
Но условие по которому строится пирамида это
Цитата Сообщение от fishki123 Посмотреть сообщение
от наибольшего к наименьшему
или наоборот. Весь смысл пирамидальной сортировки в этом и состоит что строишь пирамиду с условием "родитель >= (<=) своих потомков". Пирамиду ещё называют двоичной кучей, бинарной кучей или бинарной пирамидой
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
30.06.2018, 15:09 3
Цитата Сообщение от no swear Посмотреть сообщение
Но условие по которому строится пирамида это
Цитата Сообщение от no swear Посмотреть сообщение
от наибольшего к наименьшему
Это не правда.
http://rextester.com/EZU4511

Добавлено через 2 минуты
Иначе бы вывело 7 6 5 4 3 2 1.
0
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 56
30.06.2018, 15:40  [ТС] 4
Вот именно. Поэтому я прошу помощи насчет написания данного алгоритма. Чтобы например есть числа: 5, 1, 30, 8, 10, 7, 29, 15, 11
И выглядело примерно так: 30 10 29 8 7 15 11 5 1
30 - старший родитель, 10 и 29 его дети, у 10 - 8 и 7 дети, у 29 - 15 и 11 дети,и последнее 8 - 5 и 1 дети
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
30.06.2018, 17:10 5
fishki123, Пирамидальная сортировка
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 933
01.07.2018, 10:36 6
Цитата Сообщение от Новичок Посмотреть сообщение
Это не правда.
Что значит это неправда???
Цитата Сообщение от no swear Посмотреть сообщение
строишь пирамиду с условием "родитель >= (<=) своих потомков"
Это не правда?

Добавлено через 6 минут
И автор темы сам не понимает чего хочет! Говоря что хочет построить пирамиду не от наибольшего к наименьшему, что значит от наибольшего к наименьшему? Я понял это так - родитель >= (<=) своих потомков. Но оказывается от наибольшего к наименьшему имеется ввиду что элементы уже отсортированы(что???). ЭТо я понял со слов
Новичок В общем я без понятия что тут творится
НЕ СУЩЕСТВУЕТ ТАКОЙ ПИРАМИДЫ ОТ НАИБОЛЬШЕГО К НАИМЕНЬШЕМУ в том понимании в котором говорит автор темы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2018, 10:36
Помогаю со студенческими работами здесь

Организация очереди на массиве
Здравствуйте. Изучаю Java по Шилдту. Не понимаю для чего мы убавляем и прибавляем единицы при...

Организация очереди анимаций
Требуется реализовать следующий алгоритм: Происходит событие №1 - выполняется анимация, блок за...

Организация очереди с LINK/UNLINK в M/M/3
Здравствуйте! Довелось осваивать GPSS, возникли трудности с пониманием работы написанного.. ...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru