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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 21:42     Определить количество элементов в стеке #1
Привет народ.
Подскажите пожалуйста как получить кол-во элементов в стеке?
Я пытаюсь написать функцию выдающую такое значение.
Спасибо.

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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2010, 21:42     Определить количество элементов в стеке
Посмотрите здесь:

C++ В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов.
C++ Определить количество нулевых элементов, количество элементов в интервале от 5 до 10
Определить количество отрицательных элементов, количество элементов в интервале от 1 до 5 C++
Дан массив целых чисел. Определить количество четных элементов и количество элементов, оканчивающихся на цифру 5 C++
C++ количество четных элементов одномерного массива до числа равному а, Определить количество нечетных элементов двумерного массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
01.09.2010, 22:10     Определить количество элементов в стеке #2
Переменная top должна указывать на вершину, это и будет количестом элементов в стеке.
bobromet
24 / 24 / 1
Регистрация: 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);
}
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:16  [ТС]     Определить количество элементов в стеке #4
Переменная top должна указывать на вершину, это и будет количестом элементов в стеке.
Спасибо Дима... Только переменная Top одна, а стеков может быть несколько. Я хотел отталкиваться от
длины массива. Помню в C# есть что-то вроде Stack1.Length
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:25  [ТС]     Определить количество элементов в стеке #6
Код
Что за? Вы подаете в функцию 1 10-ый элемент. Оно вам надо? оО
Мы передаем в функцию массив из 10-ти элементов в качестве аргумента.
Примерно то же самое хотелось бы сделать с функцией Pop.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2010, 22:29     Определить количество элементов в стеке #7
NikolaWhite, Туплю. День видать тяжелый был.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:41  [ТС]     Определить количество элементов в стеке #8
Позвольте не согласиться.Функция Push() принимает в качестве аргумента вызывающий объект
(Stack1[10] или Stack2[10] )
ForEveR
01.09.2010, 22:42
  #9

Не по теме:

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

Jupiter
01.09.2010, 22:51
  #10

Не по теме:

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

TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 22:52  [ТС]     Определить количество элементов в стеке #11
И все-таки.....как же получить это количество элементов в массиве/стеке?????
Кто-нибудь???
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.09.2010, 22:56     Определить количество элементов в стеке #12
C++
1
2
3
4
int MyClass::GetNum()
{
return(Top);
}
а это по вашему что? - верхушка добавляете 1 и получите к-во элементов
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.09.2010, 23:09  [ТС]     Определить количество элементов в стеке #13
У меня два стека(а может быть больше) ,а переменная Top одна. Кол-во элементов в разных стеках может
быть разное, а значение переменной Top одно.
Я просто хочу написать функцию(GetNum()), которая возвращает кол-во элементов в вызывающем объекте.
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
01.09.2010, 23:19     Определить количество элементов в стеке #14
Какой смысл делать класс с двумя одинаковыми стеками? Делаешь класс с одним стеком и с одним извиняюсь топом, потом делаешь сколько угодно объектов и в каждом будет свой стек с своим топом.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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();
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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;
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
02.09.2010, 04:57     Определить количество элементов в стеке #17
Если уж сильно надо знать размер стека, то ИМХО лучше завести для него поле-счетчик в классе, чем каждый раз перебирать все его элементы
Ну а если стек реализован в виде массива, то тогда и вышеупомянутые решения сойдут
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
02.09.2010, 09:43     Определить количество элементов в стеке #18
Цитата Сообщение от Nameless One Посмотреть сообщение
Если уж сильно надо знать размер стека, то ИМХО лучше завести для него поле-счетчик в классе
Я в умной книжке читал рассуждения по поводу размеров списков, стеков, очередей и прочих нестабильных субстанций Букв там было много, но в общей сложности всё сводилось к тому, на сколько часто нужно получать количество элементов в контейнере. Если эта величина нужна постоянно, то разумнее держать переменную с размером и корректировать её значение при добавлении/удалении элементов. Если сведения о количестве элементов - вещь особо не востребованная, то наоборот накладнее поддерживать в актуальном состоянии счётчик, а при необходимости просто элементы посчитать. Опять же решение сильно зависит от предполагаемых размеров контейнера. Если элементов будет много, то даже время от времени их пересчитывать - долгая процедура. С другой стороны количество элементов в стеке или очереди редко интересно. Обычно программа работает по той логике, что пока они (элементы) там (в стеке/очереди) есть, нужно с ними что-то делать...
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
02.09.2010, 10:25     Определить количество элементов в стеке #19
Цитата Сообщение от easybudda Посмотреть сообщение
Букв там было много, но в общей сложности всё сводилось к тому, на сколько часто нужно получать количество элементов в контейнере. Если эта величина нужна постоянно, то разумнее держать переменную с размером и корректировать её значение при добавлении/удалении элементов. Если сведения о количестве элементов - вещь особо не востребованная, то наоборот накладнее поддерживать в актуальном состоянии счётчик, а при необходимости просто элементы посчитать.
Я примерно это же и имел в виду
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2010, 18:04     Определить количество элементов в стеке
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
02.09.2010, 18:04  [ТС]     Определить количество элементов в стеке #20
Easybudda спасибо конечно,но ваш код сложноват для меня Я всего третью неделю С++ изучаю.Только подчерпнул павильный синтаксис для функций IsFull() и IsEmpty().

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

Осталось назначить для каждого объекта свой размер массива.... я всяко перепробовал.
Буду очень признателен.
Yandex
Объявления
02.09.2010, 18:04     Определить количество элементов в стеке
Ответ Создать тему
Опции темы

Текущее время: 07:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru