Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/28: Рейтинг темы: голосов - 28, средняя оценка - 4.54
Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
#1

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

06.10.2010, 08:46. Просмотров 5077. Ответов 6
Метки нет (Все метки)

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

Найти минимальный элемент стека, вставить после него 0
найте минимальный элемент стека , е поставить после него 0 Добавлено через...

Найти минимальный элемент стека и вставить после него 0
Найти минимальный элемент стека и вставить после него 0: вот программа но...

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

Найти максимальный элемент стека и вставить после него 0
Найти максимальный элемент стека и вставить после него 0, не работает, помогите...

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

6
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
06.10.2010, 10:55 #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.
3
Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
06.10.2010, 12:43  [ТС] #3
Лучший ответ Сообщение было отмечено как решение

Решение

Спасибо, оперативненько ты сделал, подробно еще при чем
0
easybudda
06.10.2010, 12:51
  #4

Не по теме:

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

0
Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
06.10.2010, 12:59  [ТС] #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 минуту
"Не по теме:
Интересные люди такие задания придумывают... Нет у стека ни минимального, ни максимального элемента. Есть только возможность отправить в стек / извлечь из стека элемент, ну и узнать количество элементов в стеке. А если где-то посреди стека вставлять/удалять элементы - так какой же он стек после этого?" я не знаю кто это придумывает
0
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
06.10.2010, 12:59 #6
знаешь
//-------------
Знаю.
Лучше сделай отдельную тему по этому вопросу.
0
Гатальский
95 / 0 / 1
Регистрация: 31.05.2010
Сообщений: 11
06.10.2010, 13:00  [ТС] #7
а по поводу задачи с массивом, начало есть, не знаю как написать массив из двух - параметров массивов, немного недогоняю, объясните пожалуйста
0
06.10.2010, 13:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2010, 13:00

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

После первой строки, содержащей минимальный элемент, вставить строку из нулей
Дан двумерный массив А (n * m) После первой строки содержащей минимальный...

Если встречается нечетный элемент, то перед ним и после него вставить новые элементы со значением 0
Здравствуйте! Подскажите пожалуйста в чем ошибка! Задание: Если встречается...


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

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

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