Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/79: Рейтинг темы: голосов - 79, средняя оценка - 4.96
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
1

Определить количество элементов в стеке

01.09.2010, 21:42. Показов 14346. Ответов 39
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет народ.
Подскажите пожалуйста как получить кол-во элементов в стеке?
Я пытаюсь написать функцию выдающую такое значение.
Спасибо.

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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
 
class MyClass
{
public:
    int Stack1[10];
    int Stack2[10];
     int Top;
 
public:
    MyClass() : Top(0)
    {}
public:
    void Push(int var ,int Stk[10]);
public:
    int Pop();
public:
    int GetNum();
};
 
int MyClass::GetNum()
{
return(Top);
}
 
int MyClass::Pop()
{
    int var = Stack1[Top];
    Top--;
    if(Top < 0)
        Top = 0;
    return(var);
}
 
void MyClass::Push(int var ,int Stk[10])
{
    Stk[Top] = var;
     Top++ ;
     if(Top == 10)
         Top = 9;
}
 
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    MyClass obj;
 
    cout << "Кол-во элементов в Stack1: " << obj.GetNum() << "\n";
    for(int i = 1;i <=10;i++)
    {
        obj.Push(i ,obj.Stack1);
    }
    cout << "Кол-во элементов в Stack1 после вызова функции Push(): " << obj.GetNum() << "\n";
    cout << "Элементы извлеченные из Stack1: " << "\n";
    for(int i = 0;i < 10;i++)
    {
        cout << obj.Pop() << "  ";
    }
    cout << "\n";
    cout << "Кол-во элементов в Stack1: " << obj.GetNum() << "\n";
    
    _getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2010, 21:42
Ответы с готовыми решениями:

В стеке определить количество элементов имеющих значения меньше среднего
Написать программу по созданию, добавлению, просмотру и решению поставленной задачи для...

В стеке определить количество элементов, имеющих значения меньше среднего и удалить эти элементы
Здравствуйте. Помогите пожалуйста исправить код. Создать стек из случайных чисел и определить,...

Посчитать в стеке количество элементов между минимальным и максимальным значениями
Доброго времени суток, господа) Возникла проблема с реализацией. Суть кода: посчитать в стеке...

Подсчитать количество элементов в стеке
Помогите написать программу &quot;Подсчитать количество элементов в стеке&quot;. Заранее большое спасибо.

39
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
01.09.2010, 22:10 2
Переменная top должна указывать на вершину, это и будет количестом элементов в стеке.
0
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
01.09.2010, 22:13 3
Ты тут Top обнуляешь а потом вызываешь чтоб показать количество, на выходе вполне ожидаемый ноль,
все правильно за исключением назв переменной

C++
1
2
3
4
5
6
7
8
int MyClass::Pop()
{
        int var = Stack1[Top];
        Top--;
        if(Top < 0)
                Top = 0;
        return(var);
}
0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:16  [ТС] 4
Переменная top должна указывать на вершину, это и будет количестом элементов в стеке.
Спасибо Дима... Только переменная Top одна, а стеков может быть несколько. Я хотел отталкиваться от
длины массива. Помню в C# есть что-то вроде Stack1.Length
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2010, 22:17 5
C++
1
void MyClass::Push(int var ,int Stk[10])
Что за? Вы подаете в функцию 1 10-ый элемент. Оно вам надо? оО
Хотя видимо надо) Ссори)

А что неверно-то?
Результат выполнения:
Кол-во элементов в Stack1: 0
Кол-во элементов в Stack1 после вызова функции Push(): 9
Элементы извлеченные из Stack1:
10 9 8 7 6 5 4 3 2 1
Кол-во элементов в Stack1: 0
0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:25  [ТС] 6
Код
Что за? Вы подаете в функцию 1 10-ый элемент. Оно вам надо? оО
Мы передаем в функцию массив из 10-ти элементов в качестве аргумента.
Примерно то же самое хотелось бы сделать с функцией Pop.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2010, 22:29 7
NikolaWhite, Туплю. День видать тяжелый был.
0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:41  [ТС] 8
Позвольте не согласиться.Функция Push() принимает в качестве аргумента вызывающий объект
(Stack1[10] или Stack2[10] )
0
ForEveR
01.09.2010, 22:42
  #9

Не по теме:

NikolaWhite, Да-да. Верно. Я ж написал выше.

0
Jupiter
01.09.2010, 22:51
  #10

Не по теме:

NikolaWhite, а смысл делать данные открытыми?

0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:52  [ТС] 11
И все-таки.....как же получить это количество элементов в массиве/стеке?????
Кто-нибудь???
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.09.2010, 22:56 12
C++
1
2
3
4
int MyClass::GetNum()
{
return(Top);
}
а это по вашему что? - верхушка добавляете 1 и получите к-во элементов
0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 23:09  [ТС] 13
У меня два стека(а может быть больше) ,а переменная Top одна. Кол-во элементов в разных стеках может
быть разное, а значение переменной Top одно.
Я просто хочу написать функцию(GetNum()), которая возвращает кол-во элементов в вызывающем объекте.
0
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
01.09.2010, 23:19 14
Какой смысл делать класс с двумя одинаковыми стеками? Делаешь класс с одним стеком и с одним извиняюсь топом, потом делаешь сколько угодно объектов и в каждом будет свой стек с своим топом.
1
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.09.2010, 23:36 15
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
 
const int SIZE = 10;
 
class MyClass {
private:
    int Stack[SIZE];
    int Top;
public:
    MyClass() : Top(0) {}
    void Push(int var);
    int Pop();
    int GetNum();
};
 
int MyClass::GetNum()
{
     return(Top);
}
 
int MyClass::Pop()
{
    if(Top == 0) cout << "Стек пуст";
    return Stack[--Top];
}
 
void MyClass::Push(int var)
{
    if(Top == SIZE) cout << "Стек полон";
    Stack[Top++] = var;
}
 
int main()
{
        setlocale(LC_CTYPE,"Russian");
        MyClass obj; // создаем нужное количество стеков, таким образом для каждого стека будет своя перемення Тор
        cout << "Кол-во элементов в Stack1: " << obj.GetNum() << "\n";
        for(int i = 1; i < 11; i++) obj.Push(i);
        cout << "Кол-во элементов в Stack1 после вызова функции Push(): " << obj.GetNum() << endl;
        cout << "Элементы извлеченные из Stack1: " << "\n"; // "\n" -подобные последовательности лучше заключать в одинарные кавычки - '\n'
        for(int i = 1; i < 11; i++) cout << obj.Pop() << "  ";
        cout << endl;
        cout << "Кол-во элементов в Stack1: " << obj.GetNum() << "\n";
        getch();
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12459 / 7483 / 1754
Регистрация: 25.07.2009
Сообщений: 13,762
01.09.2010, 23:50 16
Цитата Сообщение от bobromet Посмотреть сообщение
Какой смысл делать класс с двумя одинаковыми стеками?
Вот и я о том же думаю...

NikolaWhite, Вы этими двумя "стеками" чего добиться хотите?
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
#include <iostream>
#include <stdexcept>
#include <string>
#include <cstdlib>
 
class Stack {
    struct Node {
        int nValue;
        Node * pNext;
        Node(int val) : nValue(val), pNext(NULL) {}
    };
    Node * top;
public:
    Stack() : top(NULL) {}
    ~Stack(){
        Node * tmp;
        while ( top ){
            tmp = top->pNext;
            delete top;
            top = tmp;
        }
    }
    void push(int val){
        Node * pNode = new Node(val);
        pNode->pNext = top;
        top = pNode;
    }
    int pop(){
        int val;
        Node * next;
        
        if ( ! top )
            throw std::runtime_error("Empty stack!");
        
        val = top->nValue;
        next = top->pNext;
        delete top;
        top = next;
        
        return val;
    }
    bool empty() const {
        return top == NULL;
    }
    int count() const {
        int cnt = 0;
        Node * node;
        for ( node = top; node; node = node->pNext )
            ++cnt;
        
        return cnt;
    }
};
 
int main(){
    Stack stack;
    std::string buf;
    
    std::cout << "Enter some values one per string. Empty string - finish." << std::endl;
    while ( true ){
        std::cout << "> ";
        std::getline(std::cin, buf);
        if ( buf.empty() )
            break;
        stack.push(atoi(buf.c_str()));
    }
    
    if ( stack.empty() ){
        std::cout << "Empty stack" << std::endl;
        return 0;
    }
    
    std::cout << "Stack contains " << stack.count() << " elements" << std::endl;
    while ( ! stack.empty() )
        std::cout << stack.pop() << std::endl;
    
    return 0;
}
2
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.09.2010, 04:57 17
Если уж сильно надо знать размер стека, то ИМХО лучше завести для него поле-счетчик в классе, чем каждый раз перебирать все его элементы
Ну а если стек реализован в виде массива, то тогда и вышеупомянутые решения сойдут
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12459 / 7483 / 1754
Регистрация: 25.07.2009
Сообщений: 13,762
02.09.2010, 09:43 18
Цитата Сообщение от Nameless One Посмотреть сообщение
Если уж сильно надо знать размер стека, то ИМХО лучше завести для него поле-счетчик в классе
Я в умной книжке читал рассуждения по поводу размеров списков, стеков, очередей и прочих нестабильных субстанций Букв там было много, но в общей сложности всё сводилось к тому, на сколько часто нужно получать количество элементов в контейнере. Если эта величина нужна постоянно, то разумнее держать переменную с размером и корректировать её значение при добавлении/удалении элементов. Если сведения о количестве элементов - вещь особо не востребованная, то наоборот накладнее поддерживать в актуальном состоянии счётчик, а при необходимости просто элементы посчитать. Опять же решение сильно зависит от предполагаемых размеров контейнера. Если элементов будет много, то даже время от времени их пересчитывать - долгая процедура. С другой стороны количество элементов в стеке или очереди редко интересно. Обычно программа работает по той логике, что пока они (элементы) там (в стеке/очереди) есть, нужно с ними что-то делать...
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.09.2010, 10:25 19
Цитата Сообщение от easybudda Посмотреть сообщение
Букв там было много, но в общей сложности всё сводилось к тому, на сколько часто нужно получать количество элементов в контейнере. Если эта величина нужна постоянно, то разумнее держать переменную с размером и корректировать её значение при добавлении/удалении элементов. Если сведения о количестве элементов - вещь особо не востребованная, то наоборот накладнее поддерживать в актуальном состоянии счётчик, а при необходимости просто элементы посчитать.
Я примерно это же и имел в виду
0
246 / 178 / 47
Регистрация: 14.06.2010
Сообщений: 422
02.09.2010, 18:04  [ТС] 20
Easybudda спасибо конечно,но ваш код сложноват для меня Я всего третью неделю С++ изучаю.Только подчерпнул павильный синтаксис для функций IsFull() и IsEmpty().

Благодаря этому благородному сообществу разобрался я со стеками(почти).Спасибо еще раз за помощь

Осталось назначить для каждого объекта свой размер массива.... я всяко перепробовал.
Буду очень признателен.
0
02.09.2010, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2010, 18:04
Помогаю со студенческими работами здесь

Подсчитать количество элементов в стеке
1. Сформировать список строк из текстового файла. 2. Подсчитать количество элементов в стеке

Подсчитать количество элементов в стеке
Помогите пожалуйста реализовать подсчёт количества элементов в стеке! program steki_lr2; uses...

Подсчитать количество элементов в стеке
Помогите написать код на паскале (сам не шарю) Задание: Подсчитать количество элементов в стеке....

Реализовать операции со стеком в массиве. Количество элементов в стеке должно соответствовать длине массива
Реализовать операции со стеком в массиве. Количество элементов в стеке должно соответствовать длине...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru