C Упражнения: создайте односвязный список и распечатайте его в обратном порядке

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

Напишите программу на C, чтобы создать односвязный список из n узлов и отобразить его в обратном порядке.

Графическая презентация:

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

Код C:

  #include  #include  struct node {int num; //Данные узла struct node * nextptr; //Адрес узла} * stnode; void createNodeList (int n); //функция для создания спискаvoid reverseDispList (); //функция для преобразования списка в обратную сторонуvoid displayList (); //функция для отображения списка int main () {int n; printf (" n  n Связанный список: Создайте односвязный список и распечатайте его в обратном порядке:  n"); printf ("------  --------------------------------------------------  ----------------------  n ");  printf ("Введите количество узлов:");  scanf ("% d", & n);  createNodeList (n);  printf (" n В список введены следующие данные:  n");  displayList ();  reverseDispList ();  printf (" n Список в обратном порядке:  n");  displayList ();  return 0;} void createNodeList (int n) {struct node * fnNode, * tmp;  целое число, я;  stnode = (узел структуры *) malloc (sizeof (узел структуры));  if (stnode == NULL)//проверяем, является ли stnode NULL, и если да, то не выделяется память {printf ("Память не может быть выделена.");  } else {//считывает данные для узла с помощью клавиатуры printf ("Входные данные для узла 1:");  scanf ("% d", & num);  stnode-> число = число;  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 reverseDispList () {struct node * prevNode, * curNode;  if (stnode! = NULL) {prevNode = stnode; curNode = stnode-> nextptr; stnode = stnode-> nextptr; prevNode-> nextptr = NULL;//конвертируем первый узел как последний while (stnode! = NULL) {stnode  = stnode-> nextptr; curNode-> nextptr = prevNode; prevNode = curNode; curNode = stnode;} stnode = prevNode;//конвертируем последний узел в заголовок}} 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: 5 Входные данные для узла 2: 6  Входные данные для узла 3: 7 В список внесены следующие данные:  Data = 5 Data = 6 Data = 7 Список в обратном порядке: Data = 7 Data = 6 Data = 5 

Блок-схема:

createNodeList ():

reverseDispList ():

displayList ():

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

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