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

Стек на основе динамического массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти максимальный элемент матрицы http://www.cyberforum.ru/cpp-beginners/thread218983.html
Дана прямоугольная матрица, все элементы которой различны. в заштрихованной области, где min – минимальный элемент матрицы.
C++ Подправить программу, где-то ошибся) Не выводит седловые точки #include<conio.h> #include<stdio.h> void main(void) { int i,j, a, imin, imax,m,n,max,min,f; clrscr(); http://www.cyberforum.ru/cpp-beginners/thread218977.html
в чем ошибка? C++
делаю задания по книге. вот код #include <iostream.h> main() { int a, b; cout << "vvedite 2 chisla";
C++ Обратная матрица, IndexOf
нужно на vs2005 c++ сделать 2 вещи: 1)обратная матрица 2)Indexof чем проще написано тем лучше, главное чтобы норм компилировалось. ребят помогите,горит!!....
C++ Найти количество нулевых элементов массива и заменить их на найденное значение http://www.cyberforum.ru/cpp-beginners/thread218965.html
Задание: Найти количество нулевых элементов и заменить их на найденное значение. Например, 1 2 0 4 5 7 0 – 1 2 2 4 5 7 2 Массив обьявил, а задание не пойму. Помогите кто чем может. #include <cstdlib>
C++ Получить вектор по правилу Подскажите где ошибка ? Даны массивы А(10) и В(10) . Получить вектор Z(10) , где Z(j)=A(j)-B(j); Я написал прогу ну гдето видимо ошибка т.к. ответ не правильный к тому же выводится в столбец . #include<iostream.h> #include<math.h> #include<conio.h> void main() { clrscr(); float a, b , z; подробнее

Показать сообщение отдельно
horrorman
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44
23.12.2010, 21:45  [ТС]     Стек на основе динамического массива
Цитата Сообщение от SashaPinsk Посмотреть сообщение
Нельзя выделять память для каждого элемента массива. Память можно выделять только под указатели, т. е. тебе нужно реализовать аналог realloc (си) или использовать динамические структуры данных аля список.
Это я понял и решил выделять память так:
C++
1
mas =(T*) malloc(size*sizeof(T))
Выделяет нормально, но как увеличить ее непонятно

C++
1
mas = (T*) realloc(mas, (size+1)*sizeof(T));
неработает, на всякий случай весь код:

stack.h
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
#include <iostream>
using namespace std;
 
template <typename T> class Stack
{
public:
    Stack(int _size):size(_size){mas =(T*) malloc(size*sizeof(T));  top = 0;}
    ~Stack(){free(mas); mas = NULL;}}
    int StackSize();
    void Push(T item);  //Помещаем элемент в стек
    T pop();    //Выталкиваем элемент из стека
    T AddElem(T item);
private:
    T* mas_temp;
    T* mas;
    int top;
    int size;
};
 
template <typename T>
int Stack<T>::StackSize()
{
    return size;
}
//Помещаем элемент в стек
template <typename T>
void Stack<T>::Push(T item)
{
    if(top >= size)
    {
        cout << "\nStack is full. \n";
        return;
    }
    mas[top] = item;
    top++;
}
 
//Выталкиваем элемент из стека
template <typename T>
T Stack<T>::pop()
{
    if(top <=0)
    {
        cout << "\nStack is empty.\n";
        return 0;
    }   
    top--;
    return mas[top];
}
 
//Добавляем елемент в стек
template <typename T>
T Stack<T>::AddElem(T item)
{
    int size;
    size = this->StackSize();
    mas = (T*) realloc(mas, (size+1)*sizeof(T));
    cout << this->StackSize() << endl;
    top++;
    return 0;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stack.h"
#include <iostream>
using namespace std;
 
int main()
{
    int i, size;
    Stack<int> st1(7);
    for (i = 0; i < 6; i++)
    {
        st1.Push(i + 5);
    }
    st1.AddElem(15);
    size = st1.StackSize();
    cout << size << endl;
    cout << "Elements from 1st stack" << endl;
    for (i = 0; i < size-1; i++)
        cout << st1.pop() << ' ';
    cout << "\n" << endl;
    return 0;
}
 
Текущее время: 14:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru