Вставить в линейный список строку после строки с заданным номером - 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).

  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
Похожие ответы