Связанный список 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: