Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/41: Рейтинг темы: голосов - 41, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 92

Создать свой стек и сделать в нем сортировку

14.01.2016, 21:38. Показов 8509. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!!!

Помогите создать свой стек и сделать в нем сортировку, просто тот стек который есть в C# не подходит, так как по моему заданию его нельзя использовать.

Буду благодарен
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2016, 21:38
Ответы с готовыми решениями:

Нужно создать свой стек вместо контейнера
Мой код: #include<iostream> #include<stdlib.h> #include<conio.h> #include<stack> #include<cctype> using namespace std; ...

Создать стек из случайных целых чисел. Развернуть стек, т.е. «дно» стека сделать вершиной, а вершину – «дном»
Создать стек из случайных целых чисел. Развернуть стек, т.е. «дно» стека сделать вершиной, а вершину – «дном».

Создать стек из случайных целых чисел и найти в нем максимальное и минимальное значение
Создать стек из случайных целых чисел и найти в нем максимальное и минимальное значение.

14
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
14.01.2016, 22:01
Dakstar, стек не сортируется. Элементы в нем всегда хранятся в LIFO порядке. Иначе это не стек. Приведи полный текст задания.
1
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
14.01.2016, 22:09
OwenGlendower,
ну это стандартный стек не сортируется) А если делать свой "стек", то можно все что угодно нагородить)
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 92
14.01.2016, 22:20  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
стек не сортируется. Элементы в нем всегда хранятся в LIFO порядке. Иначе это не стек. Приведи полный текст задания.
У меня есть определенный алгоритм сортировки массива, по задание мне нужно запихнуть все элементы в стек, но не в тот стек который есть уже готовый в C#, а в свой, и в стеки отсортировать их

Добавлено через 1 минуту
Цитата Сообщение от pizurok Посмотреть сообщение
ну это стандартный стек не сортируется) А если делать свой "стек", то можно все что угодно нагородить)
А есть пример создания своего стека?

Добавлено через 6 минут
Цитата Сообщение от pizurok Посмотреть сообщение
ну это стандартный стек не сортируется) А если делать свой "стек", то можно все что угодно нагородить)
Желательно пример с любым алгоритмом сортировки
0
6 / 6 / 10
Регистрация: 12.01.2016
Сообщений: 20
14.01.2016, 22:27
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Типа такого
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
    class Class1<T>
    {
        List<T> list = new List<T>();
 
        public int Count
        {
            get { return list.Count; }
        }
 
        public void Push(T item)
        {
            list.Add(item);
        }
 
        public T Pop()
        {
            T item = list[list.Count - 1];
            list.RemoveAt(list.Count - 1);
 
            return item;
        }
 
        public T Peek()
        {
            return list[list.Count - 1];
        }
 
        public void Sort()
        {
            list.Sort();
        }
    }
1
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
14.01.2016, 22:27
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Dakstar,

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
97
98
99
class Node 
{
      public int val;
      public Node next;
      public Node prev;
}
 
class Stack 
{
      private Node root;
      private Node top;
      
      public void Push(int _val)
      {
            if (root  == null)
            {
                 root  = new Node();
                 root.val = _val;
                 top = root;
            }
            else 
            {
                top.next = new Node();
                top.next.val = _val;
                top.next.prev = top;
                top = top.next;
            }
     }
      public int Pop(int _val)
      {
            if (root == null)
            {
                   Console.WriteLine("Error: stack is empty");
            }
            else if (root == top)
            {
                   result = root.val;
                   root = NULL;
                   return result;
            }
            else
            {
                   int result = top.val;
                   top = top.prev;
                   top.next  = NULL;
                   return result;      
            }
     }
 
     public void Sort()
     {
           if (top == root) return;
           Node i = root;
           while(i != top.prev)
           {
                 Node j = i.next;
                 while(j != top)
                 {
                     if (i.val > j.val)
                     {
                           int x = i.val;
                           i.val = j.val;
                           j.val =x;
                     }
                     j = j.next;
                 }
                  i = i.next;
           }
     }
     public void Print()
     {
           if (root == NULL) 
           {
                 Console.WriteLine("Stack is empty");
                 return;
           }
           Node i = root.val;
           while(i != top)
           {
                 Console.Write(i.val.ToString() + " ");
                 i = i.next;
           }
           Console.WriteLine(top.val.ToString());
     }
}
 
void Main(string [] args)
{
      Stack stack = new Stack();
      stack.Push(5);
      stack.Push(3);
      stack.Push(7);
      stack.Push(2);
      stack.Push(1);
      stack.Print();
      stack.Sort();
      stack.Print();
      Console.ReadKey();
}
1
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 92
14.01.2016, 22:37  [ТС]
Спасибо всем огромное)))))))))))
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
14.01.2016, 22:38
Пардон, вот полный код своего стека с нуля
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
97
98
99
100
101
102
103
104
105
106
using System;
using System.Text;
 
namespace ConsoleApplication18
{
    class Program
    {
        class Node
        {
            public int val;
            public Node next;
            public Node prev;
        }
 
        class Stack
        {
            private Node root;
            private Node top;
 
            public void Push(int _val)
            {
                if (root == null)
                {
                    root = new Node();
                    root.val = _val;
                    top = root;
                }
                else
                {
                    top.next = new Node();
                    top.next.val = _val;
                    top.next.prev = top;
                    top = top.next;
                }
            }
            public int Pop(int _val)
            {
                int result;
                if (root == null)
                {
                    Console.WriteLine("Error: stack is empty");
                }
                else if (root == top)
                {
                    result = root.val;
                    root = null;
                    return result;
                }
                result = top.val;
                top = top.prev;
                top.next = null;
                return result;
            }
 
            public void Sort()
            {
                if (top == root) return;
                Node i = root;
                while (i != top.prev)
                {
                    Node j = i.next;
                    while (j != null)
                    {
                        if (i.val > j.val)
                        {
                            int x = i.val;
                            i.val = j.val;
                            j.val = x;
                        }
                        j = j.next;
                    }
                    i = i.next;
                }
            }
            public void Print()
            {
                if (root == null)
                {
                    Console.WriteLine("Stack is empty");
                    return;
                }
                Node i = root;
                while (i != top)
                {
                    Console.Write(i.val.ToString() + " ");
                    i = i.next;
                }
                Console.WriteLine(top.val.ToString());
            }
        }
 
        public static void Main(string[] args)
        {
            Stack stack = new Stack();
            stack.Push(5);
            stack.Push(3);
            stack.Push(7);
            stack.Push(2);
            stack.Push(1);
            stack.Print();
            stack.Sort();
            stack.Print();
            Console.ReadKey();
        }
    }
}
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 92
14.01.2016, 23:32  [ТС]
Цитата Сообщение от pizurok Посмотреть сообщение
Пардон, вот полный код своего стека с нуля
Можешь еще помочь. Я не совсем понимаю как мне запихнуть туда свою сортировку

Пример в стеке C#
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void SortStack(Stack<int> stack)
        {
            int n = stack.Count;
            int step = n / 2;
            int j;
            while (step > 0)
            {
                for (int i = 0; i < (n - step); i++)
                {
                    j = i;
                    while (j >= 0 && stack.ElementAt(j) > stack.ElementAt(j + step))
                    {
                        int temp = stack.ElementAt(j);
                        SetStackItem(stack, j, stack.ElementAt(j + step));
                        SetStackItem(stack, j + step, temp);
                        j--;
                    }
                }
                step /= 2;
            }
        }
Пример не в стеке

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
static void Main(string[] args)
        {
            StreamWriter wr = new StreamWriter(@"C:\file.txt");
            Random rdn = new Random();
            int n = 1000;
            int[] mas = new int[n];
            for (int i = 1; i < n; i++)
            {
                mas[i] = rdn.Next(1, 1000);
            }
 
            wr.WriteLine("Массив:\n");
            Console.WriteLine("Массив:");
            wr.WriteLine("------------------------------------------\n");
            Console.WriteLine("------------------------------------------");
            for (int i = 1; i < n; i++)
            {
                Console.WriteLine(mas[i]);
                wr.WriteLine("mas[" + i.ToString() + "] = " + mas[i].ToString() + "\n");
            }
            Console.WriteLine("------------------------------------------");
            wr.WriteLine("------------------------------------------\n");
 
            int tmp;
            int j;
            wr.WriteLine("Сортировка:");
            Console.WriteLine("Сортировка:");
            Console.WriteLine("------------------------------------------");
            wr.WriteLine("------------------------------------------\n");
            int step = n / 2;//инициализируем шаг.
            while (step > 0)//пока шаг не 0
            {
                for (int i = 0; i < (n - step); i++)
                {
                    j = i;
                    while (j >= 0 && mas[j] > mas[j + step])
                    {
                        int temp = mas[j];
                        mas[j] = mas[j + step];
                        mas[j + step] = temp;
                        j--;
                    }
                }
                step = step / 2;
            }
                Console.WriteLine("------------------------------------------");
                wr.WriteLine("------------------------------------------\n");
 
            Console.WriteLine("Вывод:");
            wr.WriteLine("Вывод:\n");
 
            for (int i = 1; i < n; i++ )
            {
                Console.WriteLine("mas[{0}] = {1}", i, mas[i]);
                wr.WriteLine("mas[" + i.ToString() + "] = " + mas[i].ToString() + "\n");
            }
 
                Console.ReadKey();
        }
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
15.01.2016, 00:10
Dakstar,
зачем тебе запихивать свою сортировку? В стеке, что я сделал есть сортировка. Или тебе нужно отсортировать именно по этому алгоритму?
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 92
15.01.2016, 00:20  [ТС]
Цитата Сообщение от pizurok Посмотреть сообщение
зачем тебе запихивать свою сортировку? В стеке, что я сделал есть сортировка. Или тебе нужно отсортировать именно по этому алгоритму?
Мне требуется именно по этому алгоритму, я думал что смогу сам вставить, но у меня к сожалению не получается((((
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
15.01.2016, 00:42
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Dakstar,
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using System;
using System.Text;
 
namespace ConsoleApplication18
{
    class Program
    {
        class Node
        {
            public int val;
            public Node next;
            public Node prev;
        }
 
        class Stack
        {
            private Node root;
            private Node top;
 
            public void Push(int _val)
            {
                if (root == null)
                {
                    root = new Node();
                    root.val = _val;
                    top = root;
                }
                else
                {
                    top.next = new Node();
                    top.next.val = _val;
                    top.next.prev = top;
                    top = top.next;
                }
            }
            public int Pop(int _val)
            {
                int result;
                if (root == null)
                {
                    Console.WriteLine("Error: stack is empty");
                }
                else if (root == top)
                {
                    result = root.val;
                    root = null;
                    return result;
                }
                result = top.val;
                top = top.prev;
                top.next = null;
                return result;
            }
            private Node ElementAt(int num)
            {
                if (root != null && num > -1)
                {
                    int c = 0;
                    Node current = root;
                    while (c < num)
                    {
                        c++;
                        current = current.next;
                    }
                    return current;
 
                }
                return null;
            }
            private int Count()
            {
                int c = 0;
                if (root != null)
                {
                    Node current = root;
                    while (current != top)
                    {
                        c++;
                        current = current.next;
                    }
                    c++;
                }
                return c;
            }
            public void Sort()
            {
                int n = this.Count();
                int step = n / 2;
                int j;
                while (step > 0)
                {
                    for (int i = 0; i < (n - step); i++)
                    {
                        j = i;
                        while (j >= 0 && this.ElementAt(j).val > this.ElementAt(j + step).val)
                        {
                            Node first = this.ElementAt(j);
                            Node second = this.ElementAt(j + step);
                            int buf = first.val;
                            first.val = second.val;
                            second.val = buf;
                            j--;
                        }
                    }
                    step /= 2;
                }
            }
 
 
 
            public void Print()
            {
                if (root == null)
                {
                    Console.WriteLine("Stack is empty");
                    return;
                }
                Node i = root;
                while (i != top)
                {
                    Console.Write(i.val.ToString() + " ");
                    i = i.next;
                }
                Console.WriteLine(top.val.ToString());
            }
        }
 
        public static void Main(string[] args)
        {
 
            Stack stack = new Stack();
            stack.Push(5);
            stack.Push(3);
            stack.Push(7);
            stack.Push(2);
            stack.Push(1);
            stack.Print();
            stack.Sort();
            stack.Print();
            Console.ReadKey();
            Console.ReadKey();
        }
    }
}
1
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 92
15.01.2016, 00:46  [ТС]
Цитата Сообщение от pizurok Посмотреть сообщение
Dakstar,
Спасибо огроменное)))))))))))))))))))))))))))))) )))))
0
0 / 0 / 0
Регистрация: 18.05.2022
Сообщений: 1
12.12.2022, 17:07
pizurok, добрый день, хотелось бы с вами лично пообщаться и задать несколько вопросов по вашему коду, если не будет сложно.
0
12.12.2022, 18:40
 Комментарий администратора 
jem1881, задавайте свои вопросы прямо здесь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2022, 18:40
Помогаю со студенческими работами здесь

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

решил создать свой список, с возможностью поиска в нем и доступом к элементу по индексу
Здраствуйте. Вот решил создать свой список, с возможностью поиска в нем и доступом к элементу по индексу, но чтобы не переписывал все...

Создать и заполнить стек строковых значений, найти в нем число строк из двух символов
создать стек строковых значений, для реализации используя односвязные списки.Реализовать операции добавления(push) и удаления (pop)...

Дан стек символов. Преобразовать стек, оставив в нем из группы подряд идущих символов только один
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids,...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru