Как создать список? - C (СИ)
Формулировка задачи:
Нужно просто создать список(пожалуйста с подробностями)
Решение задачи: «Как создать список?»
textual
Листинг программы
#include <stdio.h>
struct Some
{
int data;
struct Some* next;
};
struct Some* inithead(int _data)
// Initializing a head of list
{
struct Some* element = (struct Some *)malloc( sizeof(struct Some) );
element->data = _data;
element->next = NULL;
return element;
}
int addelem(struct Some* _head, int _data)
// Adding an element to the tail of _head
{
if (!_head) { printf("NULL-pointer head!\n"); return -1; }
while (_head->next)
_head = _head->next;
_head->next = (struct Some *)malloc( sizeof(struct Some) );
_head = _head->next;
_head->data = _data;
_head->next = NULL;
return 0;
}
struct Some* findelem(struct Some* _head, int _index)
// Searches for an element by index
{
if (!_head) { printf("NULL-pointer head!\n"); return NULL; }
if (_index < 0) { printf("The index must be greater than 0. Or can be 0.\n"); return NULL; }
int index = 0;
while (_head->next && _index != index)
{
++index; _head = _head->next;
}
if (_index != index) return NULL;
return _head;
}
int main(void)
{
struct Some* some = inithead(0); // Создали голову
printf("%d\n", some->data); // Вывели значение головы на консоль
for (int i = 1; i <= 10; ++i)
{
addelem(some, i); // Добавили элемент, проинициализировали значением i
printf("%d\n", findelem(some, i)->data); // Вывели на экран
}
system("pause");
return 0;
}
Объяснение кода листинга программы
- Включаем заголовочный файл
stdio.h, который содержит функции для ввода и вывода данных. - Создаём структуру
Some, которая содержит указатель на следующий элемент списка и значение данных. - Функция
initheadинициализирует голову списка, выделяя память под новый элемент списка и инициализируя его поля. - Функция
addelemдобавляет элемент в конец списка, инициализируя его поля и устанавливая ссылку на следующий элемент. - Функция
findelemнаходит элемент списка по индексу, начиная с головы списка и переходя к следующему элементу до тех пор, пока не будет найден нужный элемент или пока не будут пройдены все элементы списка. - В функции main создаём голову списка, инициализируя её значением 0.
- Выводим значение головы списка на консоль.
- Добавляем элементы в список, вызывая функцию
addelemи передавая ей голову списка и значение i. - Выводим значение нового элемента списка на консоль, вызывая функцию
findelemи передавая ей голову списка и значение i. - Приостанавливаем программу до нажатия клавиши, вызывая функцию
systemи передавая ей строкуpause. - Возвращаем 0, чтобы указать, что программа успешно завершилась.