Другие языки программирования и технологии
Помогите, пожалуйста, работа со стеками в среде С++.
Создать стек с числами от -50 до +50. Определить, сколько элементов стека находится между его минимальным и максимальным элементами. Я пытался, но не получается.
Вот накидал решение.
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
class IntStack {
struct node {
int num;
node* next;
};
private:
node* lst;
public:
IntStack(void):lst(NULL){}
~IntStack(){
this->Clear();
}
public:
void Push(int num){
node* ptr = new node();
if(ptr != NULL){
ptr->num = num;
ptr->next = lst;
lst = ptr;
}
}
void Pop(void){
node* tmp = lst;
if(lst != NULL){
lst = lst->next;
delete tmp;
}
}
int& Top(void) { return lst->num; }
int Top(void) const { return lst->num; }
bool IsEmpty(void) const {
return (lst == NULL);
}
void Clear(void){
while(! IsEmpty())
Pop();
}
};
int main(void){
const int N = 50;
srand(time(NULL));
IntStack stk;
for(int i = 0; i < 8; ++i)
stk.Push(-N + (rand() % (N*2 + 1)));
int ds[2] = {0};
int cnt, imin, imax;
imin = imax = stk.Top();
cnt = 0;
while(! stk.IsEmpty()){
if(stk.Top() > imax){
imax = stk.Top();
ds[0] = cnt;
} else if(stk.Top() < imin){
imin = stk.Top();
ds[1] = cnt;
}
cout << stk.Top() << ' ';
stk.Pop();
++cnt;
}
cout << endl;
cout << "min: " << imin << endl;
cout << "max: " << imax << endl;
cout << "cnt: " << abs(ds[0] - ds[1])-1 << endl;
cin.get();
return 0;
}
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
class IntStack {
struct node {
int num;
node* next;
};
private:
node* lst;
public:
IntStack(void):lst(NULL){}
~IntStack(){
this->Clear();
}
public:
void Push(int num){
node* ptr = new node();
if(ptr != NULL){
ptr->num = num;
ptr->next = lst;
lst = ptr;
}
}
void Pop(void){
node* tmp = lst;
if(lst != NULL){
lst = lst->next;
delete tmp;
}
}
int& Top(void) { return lst->num; }
int Top(void) const { return lst->num; }
bool IsEmpty(void) const {
return (lst == NULL);
}
void Clear(void){
while(! IsEmpty())
Pop();
}
};
int main(void){
const int N = 50;
srand(time(NULL));
IntStack stk;
for(int i = 0; i < 8; ++i)
stk.Push(-N + (rand() % (N*2 + 1)));
int ds[2] = {0};
int cnt, imin, imax;
imin = imax = stk.Top();
cnt = 0;
while(! stk.IsEmpty()){
if(stk.Top() > imax){
imax = stk.Top();
ds[0] = cnt;
} else if(stk.Top() < imin){
imin = stk.Top();
ds[1] = cnt;
}
cout << stk.Top() << ' ';
stk.Pop();
++cnt;
}
cout << endl;
cout << "min: " << imin << endl;
cout << "max: " << imax << endl;
cout << "cnt: " << abs(ds[0] - ds[1])-1 << endl;
cin.get();
return 0;
}
Ваши пытания в студию.
На чем вы остановились? ? Можно поподробнее. .
На почту скинул пример стека. Сам когда-то его писал. Там только останется в теле main заполнить его элементами и определить все по заданию. Пример заполнения там есть
На чем вы остановились? ? Можно поподробнее. .
На почту скинул пример стека. Сам когда-то его писал. Там только останется в теле main заполнить его элементами и определить все по заданию. Пример заполнения там есть
Похожие вопросы
- Помогите, пожалуйста, найти ошибку в программе сортировки стека (по убыванию ) на Си.
- Нужно в стеке найти первое появление т элемента и поставить его в начало стека. Помогите, пожалуйста!!!
- Помогите пожалуйста написать простую программу на "Си" по теме: "Стеки"
- помогите пожалуйста решить задачу по работе компьютера!
- Умные люди есть тут?;)) ) Помогите, пожалуйста, с домашней работой по информатике. Нужно в Паскале составить алгоритм реш
- Помогите пожалуйста разобраться с вопросами по информатике и программированию
- Лабораторная работа по Ассемблеру (TASM), помогите пожалуйста)
- Помогите Пожалуйста....не могу настроить сеть между 2-я компютерами... очень прошу кто шарит загляньте...
- Помогите пожалуйста!!!
- Помогите пожалуйста избавиться от "синего экрана смерти"! кто поможет, тому +10 баллов гарантирую!