Вставить в линейный список строку после строки с заданным номером - C (СИ)
Формулировка задачи:
двунаправленный линейный список строк.требуется вставить строку после строки с номером и удалить строку с номером и заменить строку с номером и подсчитать статистику (количество строк и символов)
Решение задачи: «Вставить в линейный список строку после строки с заданным номером»
textual
Листинг программы
#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <time.h> struct ls { char* n; struct ls* next; struct ls* prev; }; void add_last(struct ls* current, int size) { struct ls* p = current; while(p->next != 0) p = p->next; p->next = malloc(sizeof(struct ls)); (p->next)->n = (char*) malloc(sizeof(char)*size); (p->next)->next = 0; (p->next)->prev = p; (p->next)->n[0]='a'+rand()%20; (p->next)->n[1]=0; } void add(struct ls* first, int size, int pos) { int num; struct ls* k; struct ls* y; struct ls* p; p = first; num = 0; if (pos < num) return; if (num != pos) while(p->next != 0) { num++; if (num == pos) { y = malloc(sizeof(struct ls)); y->n = (char*) malloc(sizeof(char)*size); y->n[0]='a'+rand()%20; y->n[1]=0; k = p->next; p->next = y; y->prev = p; y->next = k; k->prev = y; return; } p = p->next; } else { y = malloc(sizeof(struct ls)); y->n = (char*) malloc(sizeof(char)*size); y->n[0]='a'+rand()%20; y->n[1]=0; y->next = p; p->prev = y; return; } if (pos > num) return; } void print(struct ls* current) { struct ls* p = current; while(p->next != 0) { printf("%c\n", p->n[0]); p = p->next; } printf("%c\n\n", p->n[0]); } int main(int argc, char* argv[]) { struct ls first; struct ls *p; srand(time(0)); first.n = (char*) malloc(sizeof(char)*10); first.n[0]='a'+rand()%20; first.n[1]=0; first.next = 0; first.prev = 0; p=&first; print(p); add_last(p, 3); print(p); add_last(p, 3); print(p); add(p, 3, 1); p=p->prev; print(p); return 0; }
Объяснение кода листинга программы
В данном коде реализован линейный список, структура которого включает в себя указатель на следующий элемент списка (next), предыдущий элемент списка (prev) и строку (n).
- *void add_last(struct ls current, int size)** - добавляет новый элемент в конец списка. Задается размер строки (size), инициализируется новый элемент списка (new element), и затем он добавляется в конец списка.
- *void add(struct ls first, int size, int pos)** - добавляет новый элемент в список на определенной позиции. Задается позиция, на которой нужно вставить новый элемент (pos), инициализируется новый элемент списка (new element), и затем он добавляется в список на заданной позиции.
- *void print(struct ls current)** - выводит на экран все элементы списка. Происходит обход списка по элементам, и каждый элемент выводится на экран.
- *int main(int argc, char argv[])** - основная функция программы. Инициализируется первый элемент списка (first), указатель на который будет использоваться для обхода списка (p). Затем заполняется список некоторыми элементами, добавляются новые элементы на первую и вторую позиции, и выводится на экран. Для вставки строки после строки с заданным номером 1, нужно вызвать функцию add с параметрами: first = &first (указатель на первый элемент списка), size = 3 (размер строки), pos = 1 (номер строки, после которой нужно вставить новую).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д