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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Угадывание числа http://www.cyberforum.ru/cpp-beginners/thread173047.html
нужно написать программу в microsoft visial c++.ее конечный результат должен выглядеть вот так; pick a number from 1 to 10 1 higher! 3 higher! 9 lower! 8 lower!
C++ Вычислить произведение задан три целых числа Вычислить произведение двух наименьших из них http://www.cyberforum.ru/cpp-beginners/thread173040.html
Вычислить количество элементов массива, больших С C++
начал только изучать С++ а препод уже просит отчёты, помогите кто чем может: 1)в одномерном массиве из n вещественных чисел вычислить: -количество элементов, больших С -произведение элементов...
C++ Большая степень
Здраствуйте. У меня нарисовалась такая проблемка: надо подщитать число 2 в степени n (2^n), где n<=10000. n - натуральное. Вывести на екран k-й розряд числа (розряды пронумерованы справа налево,...
C++ Среда программирования на С++ для MAC http://www.cyberforum.ru/cpp-beginners/thread173022.html
Подскажите пожалуйста оптимальную среду программирования для интересующихся для MAC OS, очень мало информации по этому поводу. Заранее спасибо.
C++ Смена набора символов в консоли for (int k=0; k<256; k++) { unsigned char i=char(k); cout<<dec<<k<<' '<<oct<<k<<' '<<hex<< k<<' '<<i<<dec<<' '<<(short)i<<endl; Программа выводит число в 10-чной,... подробнее

Показать сообщение отдельно
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
06.10.2010, 10:55
Решение на 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru