Ниже представлена реализация программы на языке C для вставки и удаления нового узла в начале самоссылающегося связанного списка:
#include <stdio.h>
#include <stdlib.h>
// Structure for a node
struct Node {
int data;
struct Node* next;
};
// Function to insert a new node at the beginning of the linked list
void insertNode(struct Node head, int newData) {
// Allocate memory for new node
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
// Assign data to the new node
newNode->data = newData;
// Point the new node to the current head
newNode->next = *head;
// Set the new node as the head
*head = newNode;
}
// Function to delete the first node of the linked list
void deleteNode(struct Node head) {
if (*head == NULL) {
printf("The list is already empty!\n");
return;
}
// Store the current head node
struct Node* temp = *head;
// Move the head to the next node
*head = (*head)->next;
// Free the memory occupied by the previous head node
free(temp);
}
// Function to display the linked list
void displayList(struct Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
// Main function
int main() {
struct Node* head = NULL;
// Insert nodes at the beginning
insertNode(&head, 5);
insertNode(&head, 3);
insertNode(&head, 8);
// Display the initial linked list
printf("Initial Linked List: ");
displayList(head);
// Delete the first node
deleteNode(&head);
// Display the updated linked list
printf("Updated Linked List: ");
displayList(head);
return 0;
}
В этой программе мы определяем структуру Node
с целым числом data
и самоссылающимся указателем next
. Функция insertNode
вставляет новый узел в начало связанного списка, создавая новый узел, указывая его на текущий заголовок и обновляя заголовок новым узлом. Функция deleteNode
удаляет первый узел, перемещая головку к следующему узлу и освобождая память, занятую предыдущей головкой. Функция displayList
используется для печати элементов связанного списка.
Запустив программу, вы увидите первоначальный связанный список, а затем обновленный связанный список после удаления первого узла.
Теперь перейдем к написанию статьи для блога.
Введение
Связанные списки — это фундаментальные структуры данных, используемые в информатике и программировании. Связанный список состоит из узлов, где каждый узел содержит данные и ссылку на следующий узел. В этой статье мы рассмотрим эффективные методы вставки и удаления узлов в начале самореферентного связанного списка с использованием языка программирования C. Мы предоставим примеры кода, чтобы проиллюстрировать каждый метод и обсудить их временные сложности.
Метод 1: вставка узла в начало
Чтобы вставить новый узел в начало связанного списка, выполните следующие действия:
- Выделить память для нового узла.
- Назначьте новые данные новому узлу.
- Укажите новый узел на текущий заголовок списка.
- Установите новый узел в качестве нового главы списка.
Вот фрагмент кода, реализующий этот метод:
// Function to insert a new node at the beginning of the linked list
void insertNode(struct Node head, int newData) {
// Allocate memory for new node
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
// Assign data to the new node
newNode->data = newData;
// Point the new node to the current head
newNode->next = *head;
// Set the new node as the head
*head = newNode;
}
Метод 2: удаление первого узла
Чтобы удалить первый узел связанного списка, мы выполняем следующие шаги:
- Проверьте, пуст ли список. Если да, распечатайте соответствующее сообщение и вернитесь.
- Сохраните текущий головной узел во временной переменной.
- Переместить голову на следующий узел.
- Освободите память, занятую предыдущим головным узлом.
Вот фрагмент кода, реализующий этот метод:
// Function to delete the first node of the linked list
void deleteNode(struct Node head) {
if (*head == NULL) {
printf("Thelist is already empty!\n");
return;
}
// Store the current head node
struct Node* temp = *head;
// Move the head to the next node
*head = (*head)->next;
// Free the memory occupied by the previous head node
free(temp);
}
Заключение
В этой статье мы рассмотрели два эффективных метода вставки и удаления узлов в начале самоссылающегося связанного списка. Следуя этим методам, вы сможете легко изменить структуру связанного списка, не нарушая его целостности. Мы предоставили примеры кода на языке программирования C и обсудили временные сложности каждого метода. Связанные списки представляют собой универсальные структуры данных, и освоение этих фундаментальных операций значительно улучшит ваши навыки программирования.
Не забывайте обрабатывать крайние случаи, например пустой список, чтобы обеспечить правильное поведение вашего кода. Не стесняйтесь экспериментировать и изучать дальнейшие модификации этих методов в соответствии с вашими конкретными требованиями.