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

Найти минимальный элемент стека и вставить после него 0 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.75
Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
06.10.2010, 08:46     Найти минимальный элемент стека и вставить после него 0 #1
 ребят помогите сделать задачу, не понимаю как делать. Ввести символы, формируя из них стек.Найти минимальный элемент и вставить после него 0.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2010, 08:46     Найти минимальный элемент стека и вставить после него 0
Посмотрите здесь:

C++ Массивы. Вставить новую строку после строки, в которой находится первый встречный минимальный элемент
Вставить новую строку после строки, в которой находится первый встречный минимальный элемент C++
C++ Списки. Если встречается нечетный элемент, то перед ним и после него вставить новые элементы со значением 0
Если встречается нечетный элемент, то перед ним и после него вставить новые элементы со значением 0 C++
Найти и удалить минимальный элемент из стека C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
06.10.2010, 10:55     Найти минимальный элемент стека и вставить после него 0 #2
Решение на C++, с подробными комментариями для начинающих.

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
/*Ввести символы, формируя из них стек.Найти минимальный элемент и вставить после него 0. */
 
#include <iostream>
using namespace std;
 
 
//Описание типа узла стека.
struct Node {
Node *next;                       //указатель на узел: динамисескую структру Node
char ch;                          //данные узла.
 
Node(): next(NULL),ch(0){}                  //инициализация умолчания.
Node(Node *p, char tch): next(p),ch(tch){}  //заданая инициализация.
 
};
//-------------------------------------------------------------------
 
void push(Node **pptop , char tch);    //добавление на вершину стека.
void pop(Node**pptop);                 //выборка из вершины стека.
 
void update(Node**pptop);              //освобождение памяти из под стека.
void print(Node *ptop);                //вывести стек.
 
void input(Node **pptop);              //ввод стека.
void insert(Node *ptop);               //вставить в стек.
 
inline char get_top(Node *ptop){ return ptop->ch; }
//-------------------------------------------------------------------
 
//Главная функция.
int main(){
Node *top = NULL;   //клиентский указатель на вершину стека.
  input(&top);        //вводим  стек.
  
  print(top);         //выводим стек.
  insert(top);        //вставляем после минимального.
  print(top);         //опять выводим стек.
 
 
update(&top);       //освобождаем память, если она была выделена.
 
system("pause");
return 0;
}
 
//------------------------------------------------------------------
 
//добавление на вершину стека.
void push(Node **pptop , char tch){
Node *p = new Node(*pptop,tch);        //cоздаем узел и связываем его с предыдущим узлом.
*pptop = p;                            //на созданный узел наводиться указатель вершины стека.
}
 
//выборка из вершины стека.
void pop(Node**pptop){
  
    //Если стек создан: указатель вершины не NULL.
    if(*pptop){
      char t = (*pptop)->ch;      //получаем данные из вершины стека.
          Node *pd = *pptop;          //получаем адрес вершины стека.
         (*pptop)=(*pptop)->next;  //изменяем указатель вершины стека на следующий элемент.
         delete pd;                        //удаляем старую вершину стека.
    
    pd = NULL;
                      
    }
 
 
 
 
}
 
 
 
//освобождение памяти из под стека.
void update(Node**pptop){ while(*pptop)pop(pptop);  }
 
//вывести стек.           
void print(Node *ptop){
 
   while(ptop){
      cout<<ptop->ch<<endl;    //вывод.
      ptop=ptop->next;            //к следующему.
   }
cout<<endl;
}
 
//ввод стека.
void input(Node **pptop){
 
    unsigned int i(0);
    char data(0);
    cout<<"inputs: "; cin>>i;            //количество вводов.
    while(i){
      cout<<"input data: " ; cin>>data;  //введите значение.
          push(pptop,data);                  //cоздаем очередной узел стека.
          i--;
    }
 
 
 
 
}
 
//вставить в стек.
void insert(Node *ptop){
if(!ptop)return ;      //стек не созда или уничтожен. 
 
  Node *pt = ptop;     //указатель для поиска.
  Node *pk = ptop;     //указатель нужный для вставки в стек.
  char min = pt->ch;   //минимальный элемент.
   
  //Пока не пройдем по всему стеку.
  while(pt){
 
    if(pt->ch<min){
            pk = pt;               //записываем адрес узла.
        min = pt->ch;        //это минимальный.
    } 
 
        pt = pt->next;           //к следующему.
  }
 
  
 
  Node *p = new Node(pk->next,'0');  /*создаем узел и связываем его с узлом следующим за   минимальным. */
  pk->next = p;                              //вставляем узел в стек.
                   
   
 
}
Код проверен на VC++ 6.0 и на VS 2008.
Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
06.10.2010, 12:43  [ТС]     Найти минимальный элемент стека и вставить после него 0 #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Спасибо, оперативненько ты сделал, подробно еще при чем
easybudda
06.10.2010, 12:51
  #4

Не по теме:

Интересные люди такие задания придумывают... Нет у стека ни минимального, ни максимального элемента. Есть только возможность отправить в стек / извлечь из стека элемент, ну и узнать количество элементов в стеке. А если где-то посреди стека вставлять/удалять элементы - так какой же он стек после этого?

Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
06.10.2010, 12:59  [ТС]     Найти минимальный элемент стека и вставить после него 0 #5
Слушай, а можешь помочь еще с одной задачей, она будет немного не по теме, но мало ли, может ты знаешь:
Функция, формирующая новый массив, упорядоченный по неубыванию, из двух массивов-параметров, уже упорядоченных по неубыванию.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
 
using namespace std;
 
template<typename T> struct B : public binary_function<T,T,T>{
  T operator()( T const& a, T const& b ){
    return( 2*a + b );
  }
};
 
template<typename T> void print( T const& el ){  cout << el << " "; }
 
int main()
{
  int a[] = {1,2,3,4,5}, b[] = {2,3,4,5,6};
  int c[5];
  transform( a, a+5, b, c,  B<int>() );
  for_each( c, c+5, print<int> );
}
Добавлено через 1 минуту
"Не по теме:
Интересные люди такие задания придумывают... Нет у стека ни минимального, ни максимального элемента. Есть только возможность отправить в стек / извлечь из стека элемент, ну и узнать количество элементов в стеке. А если где-то посреди стека вставлять/удалять элементы - так какой же он стек после этого?" я не знаю кто это придумывает
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
06.10.2010, 12:59     Найти минимальный элемент стека и вставить после него 0 #6
знаешь
//-------------
Знаю.
Лучше сделай отдельную тему по этому вопросу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2010, 13:00     Найти минимальный элемент стека и вставить после него 0
Еще ссылки по теме:

C++ После первой строки, содержащей минимальный элемент, вставить строку из нулей
C++ Найти минимальный элемент стека, вставить после него 0
Найти минимальный элемент стека и вставить после него 0 C++

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

Или воспользуйтесь поиском по форуму:
Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
06.10.2010, 13:00  [ТС]     Найти минимальный элемент стека и вставить после него 0 #7
а по поводу задачи с массивом, начало есть, не знаю как написать массив из двух - параметров массивов, немного недогоняю, объясните пожалуйста
Yandex
Объявления
06.10.2010, 13:00     Найти минимальный элемент стека и вставить после него 0
Ответ Создать тему
Опции темы

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