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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2013, 11:48   #1
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
Восклицание Реализация класса List (C++)

Помогите, пожалуйста, разобраться:
необходимо реализовать класс List, только не шаблонный, а на интах, я пытаюсь переделать код, представленный в Дейтлах, (там он шаблонный), в свой, помогите, кто может! Не понимаю, почему вывод получается наикривой?

Итак, код ниже. Чтобы было понятнее, расшифровываю идентификаторы:
res_ptr - указатель на резервный элемент (tempPtr)
el_1_ptr - указатель на начало списка (firstPtr)
el_n_ptr - указатель на конец списка (lastPtr)
tek_el_ptr - указатель на текущий элемент (currentPtr)

Код:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

class List
{
private:
	int *el_1_ptr;
	int *el_n_ptr;
	int znach;
	int *next_ptr;
public:
	// конструктор по умолчанию
	List()
		: el_1_ptr (0),
		el_n_ptr (0)
	{}

	// вставить в начало списка
	void insertAtFront (const int & value)
	{
		int *new_ptr = new_el(value);
		
		if ( isEmpty() )
			el_1_ptr = el_n_ptr = new_ptr;
		else
		{
			next_ptr = el_1_ptr;
			el_1_ptr = new_ptr;
		}
	}

	// вставить в конец списка
	void insertAtBack (const int & value)
	{
		int *new_ptr = new_el(value);

		if ( isEmpty() )
			el_1_ptr = el_n_ptr = new_ptr;
		else
		{
			next_ptr = new_ptr;
			el_n_ptr = new_ptr;
		}
	}

	// удалить из начала списка
	bool delFromFront (int & value)
	{
		if ( isEmpty() )
			return false;
		else
		{
			int *res_el_ptr = el_1_ptr;
			if ( el_1_ptr == el_n_ptr )
				el_1_ptr = el_n_ptr = 0;
			else
			{
				el_1_ptr = next_ptr;
				value = znach;
				delete res_el_ptr;
				return true;
			}
		}
	}

	// удалить из конца списка
	bool delFromBack (int & value)
	{
		if ( isEmpty() )
			return false;
		else
		{
			int *res_el_ptr = el_n_ptr;
			if ( el_1_ptr == el_n_ptr )
				el_1_ptr = el_n_ptr = 0;
			else
			{
				int *tek_el_ptr = el_1_ptr;
				while (next_ptr != el_n_ptr)
					tek_el_ptr = next_ptr;
				el_n_ptr = tek_el_ptr;
				next_ptr = 0;
			}			
			value = znach;
			delete res_el_ptr;
			return true;
		}
	}

	// возврат указателя на новый элемент
	int *new_el (const int & value)
	{
		int v = value;
		return &v;
	}

	// проверка элемента на наличие значения
	bool isEmpty () const
	{
		return el_1_ptr == 0;
	}

	// вывод на экран
	void print () const
	{
		if ( isEmpty() )
		{
			cout << "Spisok pust" << endl;
			return;
		}
		int *tek_el_ptr = el_1_ptr;
		cout << "Spisok sostoit iz: ";
		while (tek_el_ptr != 0)
		{
			cout << *tek_el_ptr << ' ';
			tek_el_ptr = next_ptr;
		}
		cout << endl;
	}

	// деструктор
	~List()
	{
		if (!isEmpty() )
		{
			cout << "Destroying nodes ..." << endl;
			int *el_ptr = el_1_ptr;
			int *res_el_ptr;
			while (el_ptr != 0)
			{
				res_el_ptr = el_ptr;
				cout << znach << endl;
				el_ptr = next_ptr;
				delete res_el_ptr;
			}
		}
		cout<< "All nodes destroyed" <<endl;
	}
};

int main()
{
	/*cout<<endl<<"Testirovanie vektor"<<endl;
	Vector vec;
	vec.setVector();
	vec.getVector();
	vec.sort();
	cout<<"Poisk po kluchu=3: vec[3]="<<vec.search(3)<<endl;*/

	cout<<endl<<"Testirovanie list"<<endl;
	List list;
	cout<<"Komandy:"<<endl;
	cout<<"1-vstavit v nachalo"<<endl;
	cout<<"2-vstavit v konez"<<endl;
	cout<<"3-udalit iz nachala"<<endl;
	cout<<"4-udalit iz konza"<<endl;
	cout<<"5-konez"<<endl;
	int komanda;
	int value;
	do
	{
		cout<<"?: ";
		cin>>komanda;
		switch(komanda)
		{
		case 1:
			cout<<"Vstavka v nachalo spiska. Vvedite chislo: ";
			cin>>value;
			list.insertAtFront(value);
			list.print();
			break;
		case 2:
			cout<<"Vstavka v konez spiska. Vvedite chislo: ";
			cin>>value;
			list.insertAtBack(value);
			list.print();
			break;
		case 3:
			cout<<"Udalenie iz nachala spiska. Vvedite chislo: ";
			cin>>value;
			list.delFromFront(value);
			list.print();
			break;
		case 4:
			cout<<"Udalenie iz konza spiska. Vvedite chislo: ";
			cin>>value;
			list.delFromBack(value);
			list.print();
			break;
		}
	} while (komanda != 5);
	
	system("pause");
	return 0;
}

Последний раз редактировалось Bitter_Schokolade; 17.11.2013 в 12:12.
Bitter_Schokolade вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация класса Хагель Общие вопросы C/C++ 2 22.03.2012 19:15
реализация класса строка С++ kidsporno Помощь студентам 1 09.01.2012 00:16
Реализация класса Список TEHb C# (си шарп) 1 03.01.2012 04:55
Реализация класса Koketka Общие вопросы C/C++ 1 30.03.2011 02:25
Реализация класса на С++ danekne Помощь студентам 5 14.01.2010 18:32