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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2010, 01:45   #1
WaNo
Новичок
Джуниор
 
Регистрация: 01.04.2010
Сообщений: 2
По умолчанию С++ КЛАССЫ 2 Функции

Доброе время суток! Необходима помощь в написании следующих двух функций:

Insert (x, p, L). Этот оператор вставляет элемент x в позицию p в списке L, перемещая элементы от позиции p и далее в следующую, более высокую позицию. Таким образом , если список L состоит из элементов a1, a 2, … , a n , то после выполнения данного оператора он будет иметь вид a1, a 2, …, a p-1, x, a p ,…, a n . Если в списке L нет позиции p, то результат выполнения данного оператора не определён.

Delete (p, L). Этот оператор удаляет элемент в позиции p списка L. Так если список L состоит из элементов a1, a 2, … , a n , то после выполнения данного оператора он будет иметь вид a1, a 2, …, a p-1, a p+1 ,…, a n. Результат не определён, если в списке L нет позиции p или p = END (L).

Буду премного благодарен, если кто-нибудь сможет помочь. Сам пытался сделать, но ничего не получается((
WaNo вне форума Ответить с цитированием
Старый 01.04.2010, 03:13   #2
ildcbj
Пользователь
 
Регистрация: 01.04.2010
Сообщений: 11
По умолчанию

так вы покажите код, что вы там пытались, и вам обязательно помогут.
ildcbj вне форума Ответить с цитированием
Старый 01.04.2010, 13:02   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Код:
#include <iostream>
#include <conio.h>
using namespace std;

struct TListElem
{
	TListElem *prev, *next;
	void *data;
};

struct Student
{
	char name[50];
	int stud;
};

class TList
{
public:
	TListElem *head, *tail, *cur;
	TListElem* Find(int);
public:
	TList() { head = tail = cur = NULL; }
	virtual ~TList();
	int FindFirst(void *, int, int);
	int FindNext(void *, int, int);
	int FindBack(void *, int, int);
	void Add(void *, int);
	void Insert(void *, int, int);
	bool Delete(int);
	void *Get(int);
	void ClearAll();
	int Count(void) const;
	int Current(void) const;
};

TList::~TList()
{
	ClearAll();
}

int TList::Count(void) const
{
	int count = 0;
	TListElem *ptr = head;
	while(ptr)
	{
		count++;
		ptr = ptr->next;
	}
	return count;
}

int TList::Current(void) const
{
	int count = 0;
	TListElem *ptr = head;
	while(ptr && ptr != cur)
	{
		count++;
		ptr = ptr->next;
	}
	if(!ptr) return -1;
	return count;
}

void TList::Add(void *d, int size)
{
	cur = new TListElem;
	cur->data = new char [size];
	memcpy(cur->data,d,size);
	cur->next = NULL;
	cur->prev = tail;
	if(!head) head = cur;
	else tail->next = cur;
	tail = cur;
}

template<class T> void AddRef(TList &list, const T &d)
{
	list.Add(&d, sizeof(d));
}

template<class T> void Add(TList &list, T d)
{
	list.Add(&d, sizeof(d));
}

TListElem* TList::Find(int i)
{
	cur = head;
	while(cur && i > 0)
	{
		cur = cur->next;
		i--;
	}
	return cur;
}

bool TList::Delete(int i)
{
	if(!Find(i)) return false;
	TListElem *del = cur;
	if(cur->prev) cur->prev->next = cur->next;
	if(cur->next) cur->next->prev = cur->prev;
	delete [] (char *)cur->data;
	if(cur == head) head = head->next;
	if(cur == tail) tail = tail->prev;
	cur = cur->next ? cur->next : cur->prev;
	delete del;
	return true;
}

void* TList::Get(int i)
{
	Find(i);
	return cur ? cur->data : NULL;
}

template<class T> void GetRef(TList &list, int i, T &d)
{
	void *ptr = list.Get(i);
	if(ptr) memcpy(&d, ptr, sizeof(T));
}

template<class T> T Get(TList &list, int i, T)
{
	T d;
	void *ptr = list.Get(i);
	if(ptr) memcpy(&d, ptr, sizeof(T));
	return d;
}

void TList::ClearAll()
{
	while(head)
	{
		cur = head->next;
		delete [] (char *)head->data;
		delete head;
		head = cur;
	}
	tail = NULL;
}

int main()
{
	TList list;
	Add(list, 5);
	Add(list, 4.5);
	int x;
	GetRef(list, 0, x);
	cout << x << endl;
	cout << Get(list, 1, 0.0) << endl;
	_getch();
	return 0;
}
Некоторые функции я еще не написал, лень знаете ли, но по подобию думаю вы сможете написать insert, хм, возможно...
Kostia вне форума Ответить с цитированием
Старый 03.04.2010, 20:31   #4
WaNo
Новичок
Джуниор
 
Регистрация: 01.04.2010
Сообщений: 2
Хорошо

Спасибо огромное=)
WaNo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в С++ Alik-Soldier Общие вопросы C/C++ 58 18.01.2011 16:32
Чем отличается описание функции от определения функции в С++? Go6a Помощь студентам 4 18.07.2009 18:07
Классы vs. функции (вопрос, а не холивар) Qousio Общие вопросы C/C++ 7 21.05.2009 18:00
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57