Работа со списками - C (СИ)
Формулировка задачи:
Всем привет, прошу помочь мне. Вот такая задача. Работа со списком. Мне нужно работать с двома экземплярами.
Я создаю два head, но при добавлении узлов, список остается пустой.
Листинг программы
- #ifndef LINKED_LIST_H_
- #define LINKED_LIST_H_
- struct node {
- char* data;
- int key;
- struct node *next;
- };
- void print_list(struct node* head);
- void insert_first(struct node* head, int key, char* data);
- _Bool is_empty(struct node* head);
- int length(struct node* head);
- struct node* find(struct node* head, int key);
- struct node* delete_first(struct node* head);
- struct node* delete(struct node* head, int key);
- void sort(struct node* head);
- void reverse(struct node** head_ref);
- #endif /* LINKED_LIST_H_ */
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include "linked_list.h"
- struct node* current = NULL;
- void print_list(struct node* head) {
- struct node *current = head;
- printf("\n[ ");
- while (current != NULL) {
- printf("(%d,%s) ", current->key, current->data);
- current = current->next;
- }
- printf(" ]");
- }
- void insert_first(struct node* head, int key, char* data) {
- struct node *link = (struct node*) malloc(sizeof(struct node));
- link->key = key;
- link->data = data;
- /* point it to old first node */
- link->next = head;
- /* point first to new first node */
- head = link;
- }
- struct node* delete_first(struct node* head) {
- struct node *temp_link = head;
- /* mark next to first link as first */
- head = head->next;
- return temp_link;
- }
- _Bool is_empty(struct node* head) {
- return head == NULL;
- }
- int length(struct node* head) {
- int length = 0;
- struct node *current;
- for (current = head; current != NULL; current = current->next) {
- length++;
- }
- return length;
- }
- struct node* find(struct node* head, int key) {
- struct node* current = head;
- if (head == NULL) {
- return NULL;
- }
- while (current->key != key) {
- if (current->next == NULL) {
- return NULL;
- } else {
- current = current->next;
- }
- }
- return current;
- }
- struct node* delete(struct node* head, int key) {
- struct node* current = head;
- struct node* previous = NULL;
- if (head == NULL) {
- return NULL;
- }
- while (current->key != key) {
- if (current->next == NULL) {
- return NULL;
- } else {
- previous = current;
- current = current->next;
- }
- }
- if (current == head) {
- head = head->next;
- } else {
- previous->next = current->next;
- }
- current->next = NULL;
- free(current);
- current = NULL;
- return current;
- }
Листинг программы
- struct node* first_list = NULL;
- struct node* second_list = NULL;
- insert_first(first_list, 1, "node_1");
- insert_first(first_list, 2, "node_2");
Решение задачи: «Работа со списками»
textual
Листинг программы
- insert_first(first_list, 1, "node_1");
- insert_first(first_list, 2, "node_2");
Объяснение кода листинга программы
- В начале кода объявлены три переменные:
first_list
,value
иnode_name
. - Затем происходит вызов функции
insert_first
, которая принимает три аргумента:first_list
,value
иnode_name
. - В первом вызове функции передаются значения
first_list
равное 1,value
равное 2 иnode_name
равноеnode_1
. - Во втором вызове функции передаются значения
first_list
равное 2,value
равное 2 иnode_name
равноеnode_2
. - Функция
insert_first
вставляет новый элемент в начало списка, используя переданное значениеvalue
для определения позиции вставки. - Вставленный элемент содержит значение
node_name
. - Возвращаемое значение функции не используется в данном коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д