Создать односвязный список и добавить в него элементы - C (СИ)
Формулировка задачи:
помогите, пожалуйста. нужен код: создать односвязный список, тип информационного поля char*, добавить в список элементы с номерами 1,3,5 и т.д.
Решение задачи: «Создать односвязный список и добавить в него элементы»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node_t
{
char* str;
struct node_t* next;
} TNode;
typedef struct list_t
{
TNode* head;
TNode* tail;
} TList;
//-----------------------------------------------------------------------------
TList* Push(TList* list, const char str[])
{
TNode* node = (TNode*) malloc(sizeof(TNode));
size_t length = strlen(str);
node->str = (char*) malloc(length + 1);
strcpy(node->str, str);
node->next = NULL;
if (list->head && list->tail)
{
list->tail->next = node;
list->tail = node;
}
else
{
list->head = list->tail = node;
}
return list;
}
//-----------------------------------------------------------------------------
TList* Pop(TList* list)
{
TNode* node = list->head;
list->head = node->next;
if (list->head == NULL)
{
list->tail = NULL;
}
free(node->str);
free(node);
return list;
}
//-----------------------------------------------------------------------------
void Clear(TList* list)
{
while (list->head)
{
Pop(list);
}
}
//-----------------------------------------------------------------------------
void Print(const TList* list)
{
const TNode* node = list->head;
for (; node; node = node->next)
{
printf("%s, ", node->str);
}
printf("\b\b \n");
}
//-----------------------------------------------------------------------------
int main()
{
const char* CWords[] = {"one", "two", "three", "four", "five", "six",
"seven", "eight", "nine", "ten", NULL};
TList list = {NULL, NULL};
const char** pwords = CWords;
for (; *pwords; ++pwords)
{
Push(&list, *pwords);
}
Print(&list);
Clear(&list);
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
В данном коде реализован односвязный список, который заполняется элементами из массива строк CWords. Каждый элемент списка представлен структурой TNode, которая содержит указатель на следующую вершину списка и строку. Функция Push добавляет новый элемент в список, функция Pop удаляет последний элемент из списка, функция Clear полностью очищает список, функция Print выводит элементы списка на экран. Список содержит следующие переменные:
- TList* list - указатель на структуру, представляющую список.
- TNode* head - указатель на первый элемент списка.
- TNode* tail - указатель на последний элемент списка. В функции main создаётся экземпляр списка и заполняется элементами из массива CWords. Затем список выводится на экран, очищается и завершается работа программы.