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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
privit_91
13 / 13 / 0
Регистрация: 06.11.2012
Сообщений: 79
#1

Стек на основе массива структур - эт как понять читаю литературу и не могу понять! - C++

31.12.2012, 18:31. Просмотров 889. Ответов 7
Метки нет (Все метки)

Стек статически (на основе массива структур). Пример структура "Товар" которая включает в себя: № по каталогу(ключ), Название, цена, срок годности.
Как правильно это реализовать?
Как реализовать добавление элементов в стек.
Помогите понять?????
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2012, 18:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стек на основе массива структур - эт как понять читаю литературу и не могу понять! (C++):

Передача массива в функцию. Не могу понять что не так - C++
Добрый вечер. Помогите, пожалуйста, решить проблему. Задание такое: Дана целочисленная прямоугольная матрица, все элементы которой...

Не могу понять как написать - C++
Доброго времени суток. Не мог бы кто помочь в написании программ: 1. Определить имеет ли действительные корни уравнение ax2 + bx + c =...

Не могу понять как передать - C++
есть код #include "stdafx.h" #include <iostream> #include <Windows.h> #include <time.h> #include <ctime> #include <tchar.h> ...

Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) - C++
Вот дана такая задача Напишите программу, которая циклически сдвигает элементы массива вправо (0-й элемент становится 1-м, 1-й становится...

Компилятор выдает ошибку при объявлении массива. Не могу понять где соль - C++
Объясните пожалуйста в чем моя ошибка. Вот исходник #include <iostream> // cin, cout,endl #include <math.h> // Мат функции ...

Не могу понять, как исправить ошибку - C++
Здравствуйте, помогите с моей программой. При компиляции всё замечательно и нет никаких проблем, однако при запуске вылетает много...

7
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 18:34 #2
Цитата Сообщение от privit_91 Посмотреть сообщение
Как реализовать добавление элементов в стек.
std::stack
0
Kuzia domovenok
1958 / 1811 / 142
Регистрация: 25.03.2012
Сообщений: 6,286
Записей в блоге: 1
31.12.2012, 20:10 #3
Цитата Сообщение от go Посмотреть сообщение
std::stack
вообще не в тему.
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
31.12.2012, 20:20 #4
Тебе нужен код или понять? (Если код, приведи задание.)
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 20:29 #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
вообще не в тему.
Почему?
0
Kuzia domovenok
1958 / 1811 / 142
Регистрация: 25.03.2012
Сообщений: 6,286
Записей в блоге: 1
31.12.2012, 20:33 #6
потому что ТС требует создать структуру "стек" самостоятельно на основе статического массива!
Например так:
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
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std; 
struct data{
int val;
data(int d=0):val(d){};
};
const int capacity=100;
struct stack{
    data buffer[capacity];
    data* head;
    stack(){head=buffer;}
    void push(data val){
        if(head!=(capacity+buffer)){
            *head=val;
            head++;
        }
    }
    data pop(){
        if (head!=buffer){
            head--;
            return *head;
        }
        else return -1;
    }
};
 
int main()
{
    stack s;
    s.push(4);
    s.push(5);
    cout<<s.pop().val<<" "<<s.pop().val;
    system("pause");  
    return 0;
}
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
31.12.2012, 20:57 #7
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
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <stdexcept>
#include <string>
 
template<class T>
class StaticStack {
 public:
  explicit StaticStack(size_t capacity) : capacity(capacity), cursor(0),
    stack(new T[capacity]) {}
  virtual ~StaticStack() {
    delete [] stack;
  }
  bool isEmpty() const { return cursor == 0; }
  size_t getSize() const { return cursor; }
  size_t getCapacity() const { return capacity; }
  const T &getTop() const {
    if (isEmpty()) 
      throw std::underflow_error("stack is empty");
    else
      return stack[cursor - 1];
  }
  void push(const T &value) {
    if (getSize() >= getCapacity())
      throw std::overflow_error("stack overflow");
    else
      stack[cursor++] = value;
  }
  T pop() {
    if (isEmpty()) 
      throw std::underflow_error("stack is empty");
    else
      return stack[--cursor];
  }
 private:
  StaticStack(const StaticStack &);
  StaticStack &operator=(const StaticStack &);
  size_t capacity;
  size_t cursor;
  T *stack;
};
 
class Product {
 public:
  Product() : id(), name(), cost(), bestForDays() {}
  Product(int id, const std::string &name, double cost, int bestForDays)
    : id(id), name(name), cost(cost), bestForDays(bestForDays) {}
  int getId() const { return id; }
  const std::string &getName() const { return name; }
  double getCost() const { return cost; }
  int getBestForDays() const { return bestForDays; }
 private:
  int id;
  std::string name;
  double cost;
  int bestForDays;
};
 
Product getRandomProduct() {
  static const std::string names[] = {"milk", "tea", "peanut", "bread", "apple"};
  static int lastId = 0;
  return Product(lastId++, names[rand() % (sizeof(names) / sizeof(std::string))],
    (1000 + rand() % 1000) / 100., 10 + rand() % 7);
}
 
std::ostream &operator<<(std::ostream &stream, const Product &product) {
  stream << "Product{"
    "id=" << product.getId() << "," <<
    "name=" << product.getName() << "," <<
    "cost=" << product.getCost() << "," <<
    "bestForDays=" << product.getBestForDays() << "}";
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  StaticStack<Product> stack(15);
 
  try {
    for (int i = 0; i < 10 + rand() % 10; ++i)
      stack.push(getRandomProduct());
  } catch (std::overflow_error e) {
    std::cout << "Error. Stack capacity is " << stack.getCapacity() <<
      ", stack is full. No more elements allowed." << std::endl;
  }
 
  std::cout << "Number of products: " << stack.getSize() << std::endl;
  while (!stack.isEmpty()) {
    std::cout << stack.pop() << std::endl;
  }
  
  std::cin.peek();
  return 0;
}
0
go
31.12.2012, 21:02     Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
  #8

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
потому что ТС требует создать структуру "стек" самостоятельно на основе статического массива!
Ну да. Не понял задание, из-за его кривизны. Думал, что нужно хранить структуры в стэке.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2012, 21:02
Привет! Вот еще темы с ответами:

Не могу понять как исправить ошибку - C++
#include &lt;vcl.h&gt; #pragma hdrstop #include &quot;Unit1.h&quot; //--------------------------------------------------------------------------- ...

Не могу понять, как работает программа - C++
Здравствуйте, непонятны некоторые функции программы. Спасибо. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstring&gt; ...

Не могу понять как написать правильно. - C++
Не могу понять как это написать правильно. Оно даже не компилируется. #include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; ...

Не могу понять как прочитать файл - C++
Вродь как двоичный файл, но прочитать не могу его.. ...


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

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

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