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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2013, 23:09   #1
el_gato_de_Ch
Пользователь
 
Регистрация: 21.05.2013
Сообщений: 13
По умолчанию реализация списка

Всем привет.

В качестве задания было необходимо реализовать односвязный список. И вот в итоге что получилось:

my_list.h

Код:
#ifndef _MY_LIST_H_
#define _MY_LIST_H_

#include <cstdlib>

struct node
{
	int value;
	node* next;
	
	node(int v = 0)
	{
		value = v;
		next = NULL;
	}
};

class my_list
{
	int s;
	node *head;
	node *cur;
	
	public :
	my_list();
	~my_list();
	
	void goto_head(void);
	void goto_next(void);
	void remove(int);
	void add(int);
	
	int cur_val(void);
	int size(void);

	private:
	my_list(const my_list&) = delete;
  my_list& operator = (const my_list&) = delete;
};

#endif
my_list.cpp

Код:
#include "my_list.h"

my_list::my_list()
{
	s = 0;
	
	cur = new node;
	head = cur;
}

my_list::~my_list()
{
	if(head != cur)	
		delete cur;
	
	delete head;
}
/*
my_list&::my_list operator = (const my_list& l)
{
	my_list r;
	l.goto_head();
	
	for(int i = 0; i < l.size(); ++i)
	{
		int val = l.cur_val();
		r.add(val);
		l.goto_next();
	}
	return *r;
}
*/
void my_list::add(int val)
{
	node *n = new node(val);
	
	cur->next = n;
	cur = n;
	
	++s;
}

void my_list::remove(int pos)
{
	goto_head();
	
	if(!pos)
	{
		cur = cur->next;
		head->next = cur;

		--s;
		return;
	}

	for(int i = 0; i < pos - 1; ++i)
		cur = cur->next;
		
	cur->next = (pos == s - 1) ? NULL : cur->next->next;
		
	--s;
}

int my_list::cur_val()
{
	return cur->value;
}

void my_list::goto_next()
{
	cur = cur->next;
}

void my_list::goto_head()
{
	cur = head->next;
}

int my_list::size(void)
{
	return s;
}
В целом функции добавления и удаления элемента из списка работают. Однако, у меня есть просьба посмотреть на реализацию и выявить её ошибки, возможно, можно было проще сделать метод удаления элемента. К тому же у меня закрадывается подозрение что при удалении элементов из списка образуются утечки памяти, как этого избежать, реализовать деструктор у структуры node и явно её вызывать при удалении элемента??
el_gato_de_Ch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программная реализация однонаправленного линейного списка Денис Ст Помощь студентам 2 14.01.2014 21:50
Реализация очереди с элементами из списка Quadrelle Паскаль, Turbo Pascal, PascalABC.NET 1 20.04.2013 22:05
Реализация списка файлов -Jack- Общие вопросы Delphi 10 30.05.2012 03:35
Реализация последовательного линейного списка DoubleD Общие вопросы C/C++ 4 05.01.2011 17:11
реализация выбора из списка yulkas Microsoft Office Access 5 25.03.2010 14:07