Нужен односвязный список с фиктивным элементом, перерыл весь интернет что это такое понял, но вот как реализовать ума не приложу...
хотелось бы примерчик создать такого списка)))
Здравствуйте, Viator, Вы писали:
V>Нужен односвязный список с фиктивным элементом, перерыл весь интернет что это такое понял, но вот как реализовать ума не приложу... V>хотелось бы примерчик создать такого списка)))
Гм... Т.е. как создать обычный список ты знаешь, и только фиктивный элемент ставит тебя в тупик? Это как-то странно...
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Viator, Вы писали:
V>>Нужен односвязный список с фиктивным элементом, перерыл весь интернет что это такое понял, но вот как реализовать ума не приложу... V>>хотелось бы примерчик создать такого списка)))
R>Гм... Т.е. как создать обычный список ты знаешь, и только фиктивный элемент ставит тебя в тупик? Это как-то странно...
что странного??? я только начал изучать С++, и как создать обычный список куча примеров есть, а про фиктивный элемент нигде не нашел...
Здравствуйте, Viator, Вы писали:
V>что странного??? я только начал изучать С++, и как создать обычный список куча примеров есть, а про фиктивный элемент нигде не нашел...
Так список с фиктивным элементом это и есть обычный список. С единственной лишь особенностью — в нем присутствует один элемент, недоступный из вне, используемый в служебных целях (организация циклических списков, маркеры конца и пр.).
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Viator, Вы писали:
V>>что странного??? я только начал изучать С++, и как создать обычный список куча примеров есть, а про фиктивный элемент нигде не нашел...
R>Так список с фиктивным элементом это и есть обычный список. С единственной лишь особенностью — в нем присутствует один элемент, недоступный из вне, используемый в служебных целях (организация циклических списков, маркеры конца и пр.).
прямо как во всех книгах... я это уже прочитал не раз и не два, а как реализовать односвязный кольцевой список додумаваете сами называется...
Здравствуйте, Viator, Вы писали:
V>прямо как во всех книгах... я это уже прочитал не раз и не два, а как реализовать односвязный кольцевой список додумаваете сами называется...
Здравствуйте, Viator, Вы писали:
V>>прямо как во всех книгах... я это уже прочитал не раз и не два, а как реализовать односвязный кольцевой список додумаваете сами называется...
V>я создал вот такой список V>как сюда добавить фиктивный элемент?
Просто возьми и добавь, прямо при создании списка. Можешь даже создавать его не оператором new, а разместить прямо в объекте списка. И замкни этот узел сам на себя. Это специальный скрытый элемент, список, не содержащий узлов, кроме этого, считается пустым. Элемент следующий сразу за ним — это начало списка. Вставка нового элемент ПЕРЕД этим элементом, будет соответствовать вставке в конец списка, а вставка сразу ПОСЛЕ него — это вставка в начало списка.
--
Справедливость выше закона. А человечность выше справедливости.
R>Просто возьми и добавь, прямо при создании списка. Можешь даже создавать его не оператором new, а разместить прямо в объекте списка. И замкни этот узел сам на себя. Это специальный скрытый элемент, список, не содержащий узлов, кроме этого, считается пустым. Элемент следующий сразу за ним — это начало списка. Вставка нового элемент ПЕРЕД этим элементом, будет соответствовать вставке в конец списка, а вставка сразу ПОСЛЕ него — это вставка в начало списка.
я понимаю что для вас это просто, но с этим ни разу не сталкивался и для меня это тоже самое что инопланетная форма жизни (которую я никогда не видел), если это так просто почему нельзя написать несколько строк кода, вместо 5 строк текста???
Здравствуйте, Viator, Вы писали:
V>я понимаю что для вас это просто, но с этим ни разу не сталкивался и для меня это тоже самое что инопланетная форма жизни (которую я никогда не видел), если это так просто почему нельзя написать несколько строк кода, вместо 5 строк текста???
Где-то так:
struct Node
{
int data;
Node * next;
Node(int data, Node * next) : data(data), next(next) { }
};
class List
{
private:
Node * begin;
Node nil;
public:
List() : begin(&nil), nil(0, &nil) { }
~List()
{
while (begin != &nil)
{
Node * next = begin.next;
delete begin;
begin = next;
}
}
void push_front(int data)
{
begin = new Node(data, begin);
}
Node * begin() { return begin; }
Node * end() { return &nil; }
};
Здравствуйте, Viator, Вы писали:
R>>Просто возьми и добавь, прямо при создании списка. Можешь даже создавать его не оператором new, а разместить прямо в объекте списка. И замкни этот узел сам на себя. Это специальный скрытый элемент, список, не содержащий узлов, кроме этого, считается пустым. Элемент следующий сразу за ним — это начало списка. Вставка нового элемент ПЕРЕД этим элементом, будет соответствовать вставке в конец списка, а вставка сразу ПОСЛЕ него — это вставка в начало списка.
V>я понимаю что для вас это просто, но с этим ни разу не сталкивался и для меня это тоже самое что инопланетная форма жизни (которую я никогда не видел), если это так просто почему нельзя написать несколько строк кода, вместо 5 строк текста???
, то можно было бы и вставить. А так твой код сначала надо полностью переписать. Кстати, Don Reba, видимо, специально внес в свой код ошибку, чтоб дать тебе возможность хоть что-то сделать самому
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Viator, Вы писали:
V>>>прямо как во всех книгах... я это уже прочитал не раз и не два, а как реализовать односвязный кольцевой список додумаваете сами называется...
V>>я создал вот такой список V>>как сюда добавить фиктивный элемент?
R>Просто возьми и добавь, прямо при создании списка. Можешь даже создавать его не оператором new, а разместить прямо в объекте списка. И замкни этот узел сам на себя. Это специальный скрытый элемент, список, не содержащий узлов, кроме этого, считается пустым. Элемент следующий сразу за ним — это начало списка. Вставка нового элемент ПЕРЕД этим элементом, будет соответствовать вставке в конец списка, а вставка сразу ПОСЛЕ него — это вставка в начало списка.
, то можно было бы и вставить. А так твой код сначала надо полностью переписать. Кстати, Don Reba, видимо, специально внес в свой код ошибку, чтоб дать тебе возможность хоть что-то сделать самому
Вы что думаете, что мне надо только список создать, нет там еще около 10-ти функций которые надо написать, и я не прошу их вас писать, я пытаюсь написать их сам, но чтобы начать их писать надо сначало этот список создать...
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, Viator, Вы писали:
V>>я понимаю что для вас это просто, но с этим ни разу не сталкивался и для меня это тоже самое что инопланетная форма жизни (которую я никогда не видел), если это так просто почему нельзя написать несколько строк кода, вместо 5 строк текста???
DR>Где-то так: DR>
Здравствуйте, Viator, Вы писали:
V>Нужен односвязный список с фиктивным элементом, перерыл весь интернет что это такое понял, но вот как реализовать ума не приложу... V>хотелось бы примерчик создать такого списка)))
Зачем вообще нужен фиктивный узел?
Обычный одно- или двусвязный список работает (не устроен, а именно работает) так:
, то можно было бы и вставить. А так твой код сначала надо полностью переписать. Кстати, Don Reba, видимо, специально внес в свой код ошибку, чтоб дать тебе возможность хоть что-то сделать самому
V>Вы что думаете, что мне надо только список создать, нет там еще около 10-ти функций которые надо написать, и я не прошу их вас писать, я пытаюсь написать их сам, но чтобы начать их писать надо сначало этот список создать...
фиктивный узел нужен для того, чтобы тебе не приходилось проверять граничные условия вроде равенства на нуль.
соответственно, фиктивный узел это узел который появляется при создании списка и существует на протяжении всего времени его существования.
работай с ним как с обычным элементом списка, но никогда не удаляй. вот и вся наука.
Здравствуйте, Viator, Вы писали:
V>>>>прямо как во всех книгах... я это уже прочитал не раз и не два, а как реализовать односвязный кольцевой список додумаваете сами называется...
V>>>я создал вот такой список V>>>как сюда добавить фиктивный элемент?
R>>Просто возьми и добавь, прямо при создании списка. Можешь даже создавать его не оператором new, а разместить прямо в объекте списка. И замкни этот узел сам на себя. Это специальный скрытый элемент, список, не содержащий узлов, кроме этого, считается пустым. Элемент следующий сразу за ним — это начало списка. Вставка нового элемент ПЕРЕД этим элементом, будет соответствовать вставке в конец списка, а вставка сразу ПОСЛЕ него — это вставка в начало списка.
V>Вот так? V>...
Ну типа того. Только поле "first" здесь совершенно лишнее — вместо него (везде, где оно используется) лучше использовать dummy->link. Само же поле "dummy" лучше встроить прямо в структуру списка, а не выделять в динамике (смотри поле "nil" в примере Don Reba). Поле "last" тоже можно выкинуть (пока, по крайней мере) — оно нужно только для операции вставки В КОНЕЦ списка, без которого, вероятно можно обойтись.
--
Справедливость выше закона. А человечность выше справедливости.
R>Ну типа того. Только поле "first" здесь совершенно лишнее — вместо него (везде, где оно используется) лучше использовать dummy->link. Само же поле "dummy" лучше встроить прямо в структуру списка, а не выделять в динамике (смотри поле "nil" в примере Don Reba). Поле "last" тоже можно выкинуть (пока, по крайней мере) — оно нужно только для операции вставки В КОНЕЦ списка, без которого, вероятно можно обойтись.
Здравствуйте, Don Reba, Вы писали:
R>>Кстати, Don Reba, видимо, специально внес в свой код ошибку, чтоб дать тебе возможность хоть что-то сделать самому
DR>Может, глаз замылился. Где ошибся?
Да просто компильни и увидишь: имя begin используется повторно (как член-данные и как член-функция).
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>>>Кстати, Don Reba, видимо, специально внес в свой код ошибку, чтоб дать тебе возможность хоть что-то сделать самому DR>>Может, глаз замылился. Где ошибся? R>Да просто компильни и увидишь: имя begin используется повторно (как член-данные и как член-функция).
Я бы begin (как член-данные) вообше не стал бы заводить — вместо него вполне можно использовать nil.next.
--
Справедливость выше закона. А человечность выше справедливости.