Форум программистов, компьютерный форум CyberForum.ru

Сортировка стеков - C++

Восстановить пароль Регистрация
 
Sofochka
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 27
19.12.2013, 21:20     Сортировка стеков #1
Надо отсортировать стек следующим образом:
до максимального элемента - по возрастанию;
после максимального по убыванию.

Ниже приведена программа в которой вводятся элементы стека и выполняются еще другие действия, которые здесь не важны. Так же там присутствует обычная сортировка.

Просьба показать сортировку на данной программе

#include "stdafx.h"
#include "iostream"
#include "stack"
#include "conio.h"

int main () {
struct stack {
int dan;
stack* next;
stack* back;
};
stack* st = new stack; //Объявление стека структуры
st->back=NULL;
int v,c,n,max;
setlocale (LC_ALL,"Russian");
v=0;
while (v!=4){
system ("cls");
puts ("Меню");
puts ("1. Формирование стека и вывод элементов стека на экран");
puts ("2. Вычислить сумму всех элементов стека, затем изменить все элементы стека, увеличив их на значение максимального + Вывод изменёного стека");
puts ("3. Сортировка стека");
puts ("4. Выход");

printf ("Ваш выбор: ");
scanf ("%d",&v);
switch (v){

case 1: system ("cls");
puts ("Введите элементы стека (для окончания ввода введите 0): ");
n=0;c=1;
while (c!=0){
printf ("[%d] = ",n+1);
scanf ("%d",&c);
if (c!=0){
st->next=new stack; //Создание нового элемента
st->next->dan=c; //Занесение в новый элемент введёного числа
st->next->back=st; //Днищем следующего элемента является текущий элемент
st=st->next; //Переход к следующему элементу (указателю)
st->next=NULL; //Последний элемент является вершиной
n++;
}
}

puts ("Сформированный стек: ");
n=1;
while (st->back!=NULL) //Вывод до последнего элемента
{
printf("[%d] = %d\n",n,st->dan);
st=st->back; //Переход к следующему элементу
n++;
}
while (st->next!=NULL){ //Возвращение обратно к вершине стека
st=st->next;}
getch();
break;

case 2:
system ("cls");
c=0;max=0;
while (st->back!=NULL){
c+=st->dan;
st=st->back;}
printf ("Сумма элементов стека = %d",c);

while (st->next!=NULL){ //Возвращение обратно к вершине стека
st=st->next;}

while (st->back!=NULL)
{
if (st->dan>max) max=st->dan;
st=st->back;
}
printf ("\nМаксимальный элемент стека = %d",max);

while (st->next!=NULL){ //Возвращение обратно к вершине стека
st=st->next;}

while (st->back!=NULL){
st->dan*=max;
st=st->back;}


printf ("\nСодержимое стека: \n");
while (st->next!=NULL){ //Возвращение обратно к вершине стека
st=st->next;}
n=1;
while (st->back!=NULL) //Вывод до последнего элемента
{
printf("[%d] = %d\n",n,st->dan);
st=st->back; //Переход к следующему элементу
n++;
}

getch();
break;

case 3:
system ("cls");
while (st->next!=NULL){ //Возвращение обратно к вершине стека
st=st->next;}
n--;
int *mas = new int [n];
n=0;
while (st->back!=NULL){
mas[n]=st->dan;
n++;
st=st->back;}

for (int i=0;i<n;i++){
for(int j=0;j<n-i-1;j++){ // внутренний цикл прохода
if (mas[j]>mas[j+1]){
c=mas[j];
mas[j]=mas[j+1];
mas[j+1]=c;}
}
}

while (st->next!=NULL){ //Возвращение обратно к вершине стека
st=st->next;}

n=0;
while (st->back!=NULL){ //Заносим отсортированные элементы обратно в стек
st->dan=mas[n];
n++;
st=st->back;}

while (st->next!=NULL){ //Возвращение обратно к вершине стека
st=st->next;}

n=1;
while (st->back!=NULL) //Вывод до последнего элемента
{
printf("[%d] = %d\n",n,st->dan);
st=st->back; //Переход к следующему элементу
n++;
}

getch();
break;

} //Закрытие switch
} //Закрытие while основного меню
} //End Основного Тела программы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 21:20     Сортировка стеков
Посмотрите здесь:

C++ из 2-х стеков в один
Разработайте класс стеков C++
C++ Создание нескольких стеков
C++ на основе стеков..... на С++
Конкатенация (присоединение) стеков C++
C++ Передача стеков
C++ Сравнение элементов стеков
Реализация k-стеков C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru