Advertisement
Dinmrmr

аисд2 стек

Dec 20th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. //программа стек:
  2. #pragma once
  3. class MyStack
  4. {
  5. public:
  6.     MyStack();
  7.     ~MyStack();
  8.  
  9.     void push(int value);
  10.     void pop();
  11.     bool empty();
  12.     int top();
  13.     int size();
  14.     float average();
  15. private:
  16.     struct Node
  17.     {
  18.         Node() : info(0), next(0)
  19.         {
  20.         }
  21.         int info;
  22.         Node *next;
  23.     };
  24.     Node *head, *work;
  25.     int stackSize;
  26. };
  27. #include "MyStack.h"
  28. #include <iostream>
  29.  
  30. using namespace std;
  31.  
  32. MyStack::MyStack() : head(0), work(0)
  33. {
  34. }
  35.  
  36. MyStack::~MyStack()
  37. {
  38. }
  39.  
  40. void MyStack::push(int value)
  41. {
  42.     Node* temp = new Node;
  43.     temp->info = value;
  44.     if (work == 0)
  45.     {
  46.         work = temp;
  47.     }
  48.     else
  49.     {
  50.         temp->next = work;
  51.         work = temp;
  52.     }
  53.     stackSize++;
  54. }
  55.  
  56. void MyStack::pop()
  57. {
  58.     if (work == 0)
  59.     {
  60.         cout << "Stack  is empty!\n";
  61.     }
  62.     else
  63.     {
  64.         Node* temp = work;
  65.         work = work->next;
  66.         delete temp;
  67.     }
  68.     stackSize--;
  69. }
  70.  
  71. bool MyStack::empty()
  72. {
  73.     if (work == 0)
  74.         return true;
  75.     else
  76.         return false;
  77. }
  78.  
  79. int MyStack::top()
  80. {
  81.     return work->info;
  82. }
  83.  
  84. int MyStack::size()
  85. {
  86.     return stackSize;
  87. }
  88.  
  89. float MyStack::average()
  90. {
  91.     Node *temp = work;
  92.     float sum = 0, i;
  93.     for (i = 0; temp != 0; ++i) {
  94.         sum += temp->info;
  95.         temp = temp->next;
  96.     }
  97.     return sum / i;
  98. }
  99.  
  100. // 13. Из числовой последовательности найти и удалить все элементы, лежащие в промежутке[A*X; B*X],
  101. //где X – среднее арифметическое элементов последовательности, A и B – задаваемые пользователем коэффициенты
  102.  
  103. #include <iostream>
  104. #include "MyStack.h"
  105. #include <cstdlib>
  106. #include <clocale>
  107.  
  108. using namespace std;
  109.  
  110. int main() {
  111.     setlocale(LC_ALL, "russian");
  112.     MyStack obj1, obj2;
  113.     int temp, A, B;
  114.     cout << "Введите A: ";
  115.     cin >> A;
  116.     cout << "Введите B: ";
  117.     cin >> B;
  118.  
  119.     cout << "Вводите числовую последовательность до (ctrl+z): ";
  120.     while (cin >> temp) {
  121.         obj1.push(temp);
  122.     }
  123.  
  124.     float avg = obj1.average();
  125.  
  126.     while (!obj1.empty()) {
  127.         temp = obj1.top();
  128.         if (temp > float(A) * avg && temp < float(B) * avg) {
  129.             obj1.pop();
  130.         }
  131.         else {
  132.             obj2.push(temp);
  133.             obj1.pop();
  134.         }
  135.     }
  136.  
  137.     cout << "Стек:";
  138.     while (!obj2.empty()) {
  139.         cout << " " << obj2.top();
  140.         obj2.pop();
  141.     }
  142.  
  143.     cout << endl;
  144.     system("pause");
  145.     return 0;
  146. }
  147. // стек из массива
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement