Вопрос №26669
 
 
 
 
Категории

 

Как реализовать структуру данных?

Cepyc · больше 6 лет назад · 4 ответа
 

Необходимо реализовать структуру данных в соответствии со своим вариантом: Элемент структуры: комплексное число.
Структура данных: дек.
нужно основные операции реализовать : добавить в начало/ конец, получить значение/ удалить элемент из начала/ конца, получить размер

Требования к реализации:
1 Для построения класса структуры данных запрещается использовании готовые структуры данных в выбранном для реализации языке программирования (языки Object Pascal и Delphi – классы TCollection, TList, TStack и др.).
2 Для реализации элемента структуры и самой структуры использовать классы с функциональностью, требуемой определением структуры данных.
3 Для размещения данных использовать механизм динамической памяти.
4 Организовать тестирование разработанных классов посредством консольного при-ложения. При выполнении каждой операции класса структуры осуществлять вывод состояния структуры данных на консоль.

Плиззззз! помогите кто может!!!

Хороший вопрос Ф топку
0
1
Ответы
Колобок · больше 6 лет назад

Что именно вам нужно? Просто объяснить как организовать эту структуру в теории, или написать полностью программу? Если последнее, то сомневаюсь, что кто-то будет писать такую работу здесь... Хоть и добавление и удаление только в начало/конец, что несколько облегчает задачу, но все равно, довольно трудоемкая работа. Да и как-то оно все мутно описано, я к примеру так и не понял, что надо именно сделать, вроде нужно просто написать программу для работы с простым однонаправленным списком в динамической памяти, элементами которого будут комплексные числа. И на каком именно языке это все делать? Делфи? Паскаль?

 
 
kelz · больше 6 лет назад

Список должен быть двусвязный чтобы не потерять указатель на предпоследний элемент при извлечении из хвоста.
Тож непонятно, это просьба написать или объяснить как делать? Объяснить и ткнуть пальцем могу, но код писать... Думаю никто не согласится, хоть тут его и на пару страничек всего

 
Колобок · больше 6 лет назад

Да там и с однонаправленным можно, достаточно указателя на начало списка. Производительность думаю мало кого там интересует, здесь цель научиться организовывать списковую структуру.

 
kelz · больше 6 лет назад

Ну вообще да, но это же "не есть гут" :)

 
Колобок · больше 6 лет назад

Да весь этот вопрос не есть гут :) Кажетсо человек хочет, чтоб ему написали программку, а сам даже не потрудился нормально объяснить, что требуется. Да и вообще это простые вещи, такое нужно делать самому, ладно если б еще на ассемблере нужно было писать, а то паскалько... ну конечно, если он сам того захочет, то помогу, но писать полностью код принципиально не буду, да и свободного времени у меня не так много, чтоб таким заниматься... если оно вообще есть...

 
kelz · больше 6 лет назад

Паскалько? А я на си написал... :)
Пусть чувак сразу Си учит, все-равно потом переучиваться...

 
Колобок · больше 6 лет назад

Просто если нужна помощь, то нужно хотябы приложить усилий, чтобы нормально обьяснить, что тебе надо, а он видимо этого не понимает.
"Для построения класса структуры данных запрещается использовании готовые структуры данных в выбранном для реализации языке программирования (языки Object Pascal и Delphi – классы TCollection, TList, TStack и др.)" - поэтому и думаю, что паскаль
А вообще молодец, я б не писал :)

 
kelz · больше 6 лет назад

Я тож не собирался, просто скучно :)

 
 
Ответ выбран автором вопроса
kelz · больше 6 лет назад

Гы... на меня напала блажь... лови кодес. :)))))
Предупреждаю, код набит в блокноте минут за 30, синтаксис не проверял - я тебе не компилятор :), работоспособность тоже не гарантирую. Здесь тебе твой дек, с добавлением/удалением в голову/хвост данных произвольного размера, на комплексные числа сам переделаешь, вывод инфы тоже сам, соответственно и хедеры тебе подключать, я ж не знаю, что ты .юзать будешь. Поработай и сам немного.

class cdeque_item
{
public:
cdeque_item();
cdeque_item(void* pdata, unsigned size, cdeque_item* pnext, cdeque_item* pprev);
~cdeque_item();

bool get_data(void* pdst, unsigned dst_size, unsigned* pcopied);
cdeque_item* get_next() { return m_pnext; }
cdeque_item* get_prev() { return m_pprev; }
void set_next(cdeque_item* pitem) { m_pnext = pitem; }
void set_prev(cdeque_item* pitem) { m_pprev = pitem; }

private:
cdeque_item* m_pnext;
cdeque_item* m_pprev;
void* m_pdata;
unsigned m_size;
};

cdeque_item::cdeque_item()
{
m_pnext = NULL;
m_pprev = NULL;
m_pdata = NULL;
m_size = 0;
}

cdeque_item::cdeque_item(void* pdata, unsigned size, cdeque_item* pnext, cdeque_item* pprev)
{
m_pnext = pnext;
m_pprev = pprev;
m_size = size;
m_pdata = new char[m_size];

if(m_size) memcpy(m_pdata, pdata, m_size);
}

cdeque_item::~cdeque_item()
{
if(m_pdata) delete(m_pdata);
}

bool cdeque_item::get_data(void* pdst, unsigned dst_size, unsigned* pcopied)
{
if(!pdst || !m_pdata) return false;

unsigned copy_size = min(dst_size, m_size);
memcpy(pdst, m_ppdata, copy_size);
if(pcopied) *pcopied = copy_size;
return true;
}

class cdeque
{
public:
cdeque();
~cdeque();

bool add_to_head(void* pdata, unsigned size);
bool add_to_tail(void* pdata, unsigmed size);
bool get_from_head(void* pdst, unsigned dst_size, unsigned* pcopied);
bool get_from_tail(void* pdst, unsigned dst_size, unsigned* pcopied);

private:
cdeque_item* m_phead;
cdeque_item* m_ptile;

};

cdeque::cdeque()
{
m_phead = m_ptile = NULL;
}

cdeque::~cdeque()
{
cdeque_item* pitem = m_phead;
while(pitem)
{
cdeque_item* pnext = pitem->get_next();
delete pitem;
pitem = pnext;
}
}

bool cdeque::add_to_head(void* pdata, unsigned size)
{
cdeque_item* pitem = new cdeque_item(pdata, size, m_phead, NULL);
if(!pitem) return false;

if(m_phead) m_phead->set_prev(pitem);
m_phead = pitem;

return true;
}

bool cdeque::add_to_tail(void* pdata, unsigned size)
{
cdeque_item* pitem = new cdeque_item(pdata, size, NULL, m_ptail);
if(!pitem) return false;

if(m_ptile) ,m_ptail->set_next(pitem);
m_phead = pitem;

return true;
}

bool cdeque::get_from_head(void* pdst, unsigned dst_size, unsigned* pcopied)
{
if(!m_phead) retun false;

cdeque_item* pnext = m_phead->get_next();
m_phead->get_data(pdst, dst_size, pcopied);
delete(m_phead);
if(pnext) pnext->set_prev(NULL);
m_phead = pnext;

return true;
}

bool cdeque::get_from_tail(void* pdst, unsigned dst_size, unsigned* pcopied)
{
if(!m_ptail) retun false;

cdeque_item* pprev = m_ptail->get_prev();
m_ptail->get_data(pdst, dst_size, pcopied);
delete(m_ptile);
if(pprev) pprev->set_next(NULL);
m_ptail = pprev;

return true;
}

void main()
{
cdeque* pdeq = new cdeque();

char mydata[256]; // <<- data any here place>

pdeq->add_to_head(mydata, sizeof(mydata));
pdeq->add_to_tail(mydata, sizeof(mydata));

unsigned copied = 0;
pdeq->get_from_head(mydata, sizeof(mydata), &copied);
pdeq->get_from_tail(mydata, sizeof(mydata), &copied);

delete pdeq;
}

 
 
 
kelz · больше 6 лет назад

Даж спасибо не сказал! :)

 
 
 
 
 
Ссылка на этот вопрос
 
Поискать ответ на вопрос: ответы@mail.ru, otvety@google.ru, Яндекс.Ответы
 
Читать новые вопросы в: LiveJournal, Livinternet, Google Reader
 
Этот вопрос посмотрели 266 раз, в среднем 3 просмотра в месяц (0.11)
 
 
 
 
 
 
Адрес друга:
 
 
 
 
 
 
 
 
 
 
 

© vorum.ru — вопросы и ответы, 2006–2016
Пишите нам на in@vorum.ru

Администрация сервера не гарантирует точность и достоверность размещаемых пользователями материалов, а также не несет ответственности ни за какие задержки, сбои, удаление или несохранность какой-либо пользовательской информации.

Цифры не для всех: 276

 
 
× Нравится наш сайт?
Нажмите кнопку «Мне нравится» (Like), чтобы присоединиться к нам на Facebook