Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2015, 02:27   #1
holfmiller
 
Регистрация: 26.03.2015
Сообщений: 5
По умолчанию Разделить стек на два стека

Подскажите, пожалуйста, как убрать лишние значения при выводе уже полученных стеков
в divide происходит разделение
(библиотеки шаблонов STL нельзя использовать))

Код:
#include <fstream>
#include <conio.h>
#include <iostream>
#include <cctype>  
#include <stack>
using namespace std;
const int NotUsed = system("color 70");


template <class T>
class Stack
{
private:
	T *stackPtr;
	int size;
	T top;
public:
	Stack(int = 10);
	~Stack();
	bool pop();
	void divide(Stack<T> &s, Stack<T> &One, Stack<T> &Two);
	bool push(const T);
	void printStack();
	bool isEmpty();
	int Top();
};

template <class T>
bool Stack<T>::isEmpty()
{
	return top ? 0 : 1;
}
template <class T>
Stack<T>::Stack(int s)
{
	size = s > 0 ? s : 10;
	stackPtr = new T[size];
	top = -1;
}

template <class T>
Stack<T>::~Stack()
{
	delete[] stackPtr;
}

template <class T>
bool Stack<T>::push(const T value)
{

	if (top == size - 1)
		return false;

	top++;
	stackPtr[top] = value;

	return true;
}


template <class T>
void Stack<T>::printStack()
{
	for (int y = size - 1; y >= 0; y--)
		cout << stackPtr[y] << endl;
}
template <typename T>
bool Stack<T>::pop()
{
	if (top == -1)
		return false; // стек пуст

	stackPtr[top] = 0; // удаляем элемент из стека
	top--;

	return true; // успешное выполнение операции
}

template <class T>
void Stack<T>::divide(Stack<T> &s, Stack<T> &One, Stack<T> &Two)
{ 
	while (!s.isEmpty())
	{
		int v = s.Top();
		s.pop();

		if (v % 2 == 0)
			One.push(v); 
		else  Two.push(v);
	}

}

template <class T>
int Stack<T>::Top()
{
	return stackPtr[top];
}

int main()
{
	setlocale(LC_ALL, "Russian");
	char i;
	i = 1;
	while (i > 0)
	{
		cout << "\nВыберите номер программы\n";
		cin >> i;
		switch (i)
		{
		case '0': i = 0;
			break;
		case'1':{ cout << "Стек из файла:";

			Stack <int> st, st1, st2;
			ifstream F("trains.txt");

			int n = 0;
			if (F)
			{
				while (!F.eof())
				{
					int a;
					F >> a;
					st.push(a);
				}
			}
			cout << "Стек:\n";
			st.printStack(); cout << '\n';
			st.divide(st, st1, st2);
			cout << "Стек c четными числами:\n";
			st1.printStack(); cout << '\n';
			cout << "Стек c нечетными числами:\n";
			st2.printStack();
			cout << '\n';
			_getch(); break;
			return 0;
		}
		case '2': {Stack <int> st(10);
			Stack <int> st1, st2;
			cout << "Заполняем стек: \n";
			int n = 0;
			while (n++ != 10)
			{
				int temp;
				cin >> temp;
				st.push(temp);

			} cout << '\n';
			cout << "Стек:\n";
			st.printStack(); cout << '\n';
			cout << '\n';
			st.divide(st, st1, st2);
			cout << "Стек c четными числами:\n"; 
			st1.printStack(); cout << '\n';
			cout << "Стек c нечетными числами:\n";
			st2.printStack();

			_getch(); break;
			return 0;
		}

		}
	}
	_getch();
	return 0;
}
holfmiller вне форума Ответить с цитированием
Старый 15.04.2015, 07:19   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

надо извлекать из первого стека и вставлять во второй.

Почему переменная топ имеет тип T?
Как именно следует извлечь данные из вашего стека - что должна возвращать pop()?
Попрубуйте ваш стек с типом данных отличным от int, например какой либо структурой - тогда даже не откомпилируется.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек на базе одностороннего связного стека foldel Помощь студентам 1 22.09.2011 21:23
два стека Максикок Помощь студентам 0 12.04.2011 20:25
СТЕК(((Написать с использованием стека((( Sonne_asja Помощь студентам 16 10.04.2011 14:54
стек внутри стека zhenya.ya Помощь студентам 0 05.05.2010 20:15