Упражнения на языке C: удаление узла из середины односвязного списка

Связанный список C: Упражнение 8 с решением

Напишите программу на C для удаления узла из середины односвязного списка.

Наглядное представление:

Пример решения:

Код C:

  #include  #include  struct node {int num; //Данные узла struct node * nextptr; //Адрес узла} * stnode; void createNodeList (int n); //функция для создания списка void MiddleNodeDeletion (int pos);//функция для удаления узла из middlevoid displayList (); //функция для отображения списка int main () {int n, num, pos; printf (" n  n Связанный список: удаление узла из середины односвязного списка.:  n"); printf ("-  --------------------------------------------------  ---------------------  n ");  printf ("Введите количество узлов:");  scanf ("% d", & n);  createNodeList (n);  printf (" n В список введены следующие данные:  n");  displayList ();  printf (" n Введите позицию удаляемого узла:");  scanf ("% d", & pos);  if (pos = n) {printf (" n Удаление невозможно из этой позиции.  n");  } if (pos> 1 && pos  число = число;  stnode-> nextptr = NULL; //Связывает поле адреса с NULL tmp = stnode; //Создает n узлов и добавляет в связанный список для (i = 2; inum = num;//связывает поле num fnNode с num fnNode-> nextptr = NULL;//связывает поле адреса fnNode с NULL tmp->  nextptr = fnNode;//связывает предыдущий узел, т.е. tmp, с fnNode tmp = tmp-> nextptr;}}}} void MiddleNodeDeletion (int pos) {int i; struct node * toDelMid, * preNode; if (stnode == NULL)  {printf ("В списке нет узлов.");} else {toDelMid = stnode; preNode = stnode; for (i = 2; inextptr; if (toDelMid == NULL) break;} if (toDelMid! = NULL  ) {if (toDelMid == stnode) stnode = stnode-> nextptr; preNode-> nextptr = toDelMid-> nextptr; toDelMid-> nextptr = NULL; free (toDelMid);} else {printf ("Удаление невозможно из  эта позиция. ");}}} void displayList () {struct node * tmp; if (stnode == NULL) {printf (" В списке нет данных. ");} else {tmp = stnode; while (tmp! = NULL) {printf (" Data =% d  n ", tmp-> num);//выводит данные текущего узла tmp = tmp-> nextptr; //сдвигает позицию текущего узла}}}  

Пример вывода:

 Связанный список: удалить узел из середины односвязного списка.  : -------------------------------------------------  ------------------------ Введите количество узлов: 3 Входные данные для узла 1: 2 Входные данные для узла 2: 5 Входные данные для узла 3  : 8 В список внесены следующие данные:  Data = 2 Data = 5 Data = 8 Введите позицию удаляемого узла: 2 Удаление успешно завершено.  Новый список: Data = 2 Data = 8 

Блок-схема:

createNodeList ():

MiddleNodeDeletion ():

displayList ():

Редактор кода программирования на C:

Оцените статью
nanomode.ru
Добавить комментарий