Вставить в линейный список строку после строки с заданным номером - C (СИ)

Узнай цену своей работы

Формулировка задачи:

двунаправленный линейный список строк.требуется вставить строку после строки с номером и удалить строку с номером и заменить строку с номером и подсчитать статистику (количество строк и символов)

Решение задачи: «Вставить в линейный список строку после строки с заданным номером»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. struct ls
  7. {
  8.  char* n;
  9.  struct ls* next;
  10.  struct ls* prev;
  11. };
  12.  
  13. void add_last(struct ls* current, int size)
  14. {
  15.  struct ls* p = current;
  16.  while(p->next != 0)
  17.   p = p->next;
  18.  p->next = malloc(sizeof(struct ls));
  19.  (p->next)->n = (char*) malloc(sizeof(char)*size);
  20.  (p->next)->next = 0;
  21.  (p->next)->prev = p;
  22.  (p->next)->n[0]='a'+rand()%20;
  23.  (p->next)->n[1]=0;
  24. }
  25.  
  26. void add(struct ls* first, int size, int pos)
  27. {
  28.  int num;
  29.  struct ls* k;
  30.  struct ls* y;
  31.  struct ls* p;
  32.  p = first;
  33.  num = 0;
  34.  if (pos < num)
  35.   return;
  36.  if (num != pos)
  37.   while(p->next != 0)
  38.   {
  39.    num++;
  40.    if (num == pos)
  41.    {
  42.     y = malloc(sizeof(struct ls));
  43.     y->n = (char*) malloc(sizeof(char)*size);
  44.     y->n[0]='a'+rand()%20;
  45.     y->n[1]=0;
  46.     k = p->next;
  47.     p->next = y;
  48.     y->prev = p;
  49.     y->next = k;
  50.     k->prev = y;
  51.     return;
  52.    }  
  53.    p = p->next;
  54.   }
  55.  else
  56.  {
  57.     y = malloc(sizeof(struct ls));
  58.     y->n = (char*) malloc(sizeof(char)*size);
  59.     y->n[0]='a'+rand()%20;
  60.     y->n[1]=0;
  61.     y->next = p;
  62.     p->prev = y;
  63.     return;
  64.  }
  65.  if (pos > num)
  66.   return;
  67. }
  68.  
  69. void print(struct ls* current)
  70. {
  71.  struct ls* p = current;
  72.  while(p->next != 0)
  73.  {
  74.   printf("%c\n", p->n[0]);
  75.   p = p->next;
  76.  }
  77.  printf("%c\n\n", p->n[0]);
  78. }
  79.  
  80. int main(int argc, char* argv[])
  81. {
  82.  struct ls first;
  83.  struct ls *p;
  84.  
  85.  srand(time(0));
  86.  first.n = (char*) malloc(sizeof(char)*10);
  87.  first.n[0]='a'+rand()%20;
  88.  first.n[1]=0;
  89.  first.next = 0;
  90.  first.prev = 0;
  91.  p=&first;
  92.  print(p);
  93.  add_last(p, 3);
  94.  print(p);
  95.  add_last(p, 3);
  96.  print(p);
  97.  add(p, 3, 1);
  98.  
  99.  p=p->prev;
  100.  print(p);
  101.  
  102.  
  103. return 0;
  104. }

Объяснение кода листинга программы

В данном коде реализован линейный список, структура которого включает в себя указатель на следующий элемент списка (next), предыдущий элемент списка (prev) и строку (n).

  1. *void add_last(struct ls current, int size)** - добавляет новый элемент в конец списка. Задается размер строки (size), инициализируется новый элемент списка (new element), и затем он добавляется в конец списка.
  2. *void add(struct ls first, int size, int pos)** - добавляет новый элемент в список на определенной позиции. Задается позиция, на которой нужно вставить новый элемент (pos), инициализируется новый элемент списка (new element), и затем он добавляется в список на заданной позиции.
  3. *void print(struct ls current)** - выводит на экран все элементы списка. Происходит обход списка по элементам, и каждый элемент выводится на экран.
  4. *int main(int argc, char argv[])** - основная функция программы. Инициализируется первый элемент списка (first), указатель на который будет использоваться для обхода списка (p). Затем заполняется список некоторыми элементами, добавляются новые элементы на первую и вторую позиции, и выводится на экран. Для вставки строки после строки с заданным номером 1, нужно вызвать функцию add с параметрами: first = &first (указатель на первый элемент списка), size = 3 (размер строки), pos = 1 (номер строки, после которой нужно вставить новую).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы