Другие языки программирования и технологии

C++ :Разработать пользовательскую библиотеку для работы с односвязным списком (использовать динамическую память).

Разработать пользовательскую библиотеку для работы с односвязным списком (использовать динамическую память). В ней реализовать следующие функции: 1. создание списка 2. добавление элементов списка (учитывать сортировку) 3. удаление элементов списка 4. сцепление двух списков в один отсортированный. Собственно необходимо так сделать, а как это сделать не могу понять, ибо не могу понять философию списка, всё что читал в нэте вроде и понятно, но в то же время для этого конкретного примера хз как, понимаю ещё когда например списком структуру сделать а тут что и как?
элементы односвязного списка - структуры с двумя полями: одно информационное, в котором содержатся сами данные, второе ссылочное, в нем содержится указатель на следующий элемент списка.
например
struct xxx
{
int data; //информационное поле
* xxx next; //указатель на следующий элемент
};
для того, чтобы список (как и любой другой объект) можно было найти в памяти, нужно взять переменную-указатель на начало списка. когда список пуст, то ее значением будет NULL
*xxx begin=NULL;
создавая первый элемент списка, мы выделяем под него память, и адрес этого блока записываем в наш указатель
begin=(*xxx)malloc(sizeof(xxx));
теперь этот элемент физически существует, и в него можно вносить данные
begin -> data=1;
begin -> next=NULL; //потому что второго элемента в списке пока еще нет
создадим второй элемент списка
*xxx temp=(*xxx)malloc(sizeof(xxx));
temp - вспомогательный указатель
begin -> next=temp;
temp -> data=2;
temp -> next=NULL;
когда появится третий элемент, поле next второго будет указывать на него
для просмотра данных в списке организуют цикл до конца списка (а признак конца - как раз значение NULL в поле next)
temp = begin;
while (temp) //пока указатель не NULL
{
cout << temp -> data;
temp=temp -> next;
}
Andrey Retish
Andrey Retish
19 025
Лучший ответ
Здесь принцип таков: список состоит из элементов, которые хранят в себе значение и указатель на следующий элемент. Если бы требовался двусвязный список, то нужно было бы, чтоб в элементе хранился указатель и на предыдущий элемент списка.
class CElement //элемент списка
{
int val; //хранимые данные
CElement *next;//указатель на следующий элемент в списке
public:
CElement(int v):val(v)
{
next=NULL;
}
};

Опишем сам список. Он должен хранить только информацию о себе. А это адреса первого и последнего элементов. Внутренняя последовательность элементов хранится в самих элементах (next).
class CList
{
CElement *end; //указатель на последний элемент списка
CElement *first;//указатель на первый элемент списка
public:
CList() //конструктор списка можно считать 1) в твоём списке заданий
{
end=NULL;//вначале список пуст, по-этому нет ни первого, ни последнего элементов.
first=NULL;
}
void Add(CElement &el); //добавляем элемент в списо
void Remove(CElement &el);//удаляем элемент из списка
void Remove(int v);//перегруженный вариант удаления по значению
CList operator+(CList &list);//объединение списков
void Sort();//сортировка списка
};
Это схема. Ориентируйся на неё.