Связные списки: исправить ошибку в коде - C (СИ)
Формулировка задачи:
#include <stdio.h> #include <stdlib.h> #include <locale.h> struct listNode{ char data; struct listNode *nextPtr; }; typedef struct listNode ListNode; typedef ListNode *ListNodePtr; void insert(ListNodePtr *sPtr, char value); char delete1(ListNodePtr *sPtr, char value); int isEmpty(ListNodePtr sPtr); void printList(ListNodePtr currendtPtr); void instructions(void); int main(void) { ListNodePtr startPtr = NULL; int choice; char item; setlocale(LC_ALL, ""); instructions(); printf_s("%s", "? "); scanf_s("%d", &choice); while (choice !=3) { switch (choice) { case 1: printf_s("%s", "Введите символ: "); scanf_s("\n%c", &item); insert(&startPtr, item); printList(startPtr); break; case 2: if (!isEmpty(startPtr)) { printf_s("%s", "Введите символ, который необходимо удалить: "); scanf_s("\n%c", &item); if (delete1(&startPtr, item)) { printf_s("%c удалён\n", item); printList(startPtr); } else { printf_s("%c не найден\n\n", item); } } else { puts("Список пуст\n"); } break; default: puts("Неверный выбор\n"); instructions(); break; } printf_s("%s", "? "); scanf_s("%d", &choice); } puts("Программа завершена."); return 0; } void instructions(void) { puts("Введите свой выбор:\n" " 1 для ввода символа в связанный список как элемент списка\n" " 2 для удаления символа как элемента в связанном списке\n" " 3 для выхода из программы"); } void insert(ListNodePtr *sPtr, char value) { ListNodePtr newPtr, previousPtr, currentPtr; newPtr = malloc(sizeof(ListNode)); if(newPtr == NULL) printf_s("%s", "Память не выделена"); else printf_s("%s", "Всё ок"); if (newPtr != NULL) { newPtr->data = value; newPtr->nextPtr = NULL; previousPtr = NULL; currentPtr = *sPtr; while (currentPtr != NULL && value > currentPtr->data) { previousPtr = currentPtr; currentPtr = currentPtr->nextPtr; } if (previousPtr == NULL) { newPtr->nextPtr = *sPtr; *sPtr = newPtr; } else { previousPtr->nextPtr = newPtr; newPtr->nextPtr = currentPtr; } } else { printf_s("%c не вставлен. Память не доступна\n", value); } } char delete1(ListNodePtr *sPtr, char value) { ListNodePtr previousPtr, currentPtr, tempPtr; if (value == (*sPtr)->data ) { tempPtr = *sPtr; *sPtr = (*sPtr)->nextPtr; free(tempPtr); return value; } else { previousPtr = *sPtr; currentPtr = (*sPtr)->nextPtr; while (currentPtr != NULL && currentPtr->data != value) { previousPtr = currentPtr; currentPtr = currentPtr->nextPtr; } if (currentPtr != NULL) { tempPtr = currentPtr; previousPtr->nextPtr = currentPtr->nextPtr; free(tempPtr); return value; } } return '\0'; } int isEmpty(ListNodePtr sPtr) { return sPtr == NULL; } void printList(ListNodePtr currendtPtr) { if (currendtPtr == NULL) { puts("Список пуст"); } else { puts("Список: "); while (currendtPtr != NULL) { printf_s("%c --> ", currendtPtr->data); currendtPtr = currendtPtr->nextPtr; } puts("Пусто\n"); } }
newPtr = (struct listNode*) malloc(sizeof(ListNode));
- Что значить в данном контексте *ListNodePtr? Что означает это - * И зачем делать псевдоним псевдонима в данном листинге???
C
Решение задачи: «Связные списки: исправить ошибку в коде»
textual
Листинг программы
void instructions(void) { puts("Введите свой выбор:\n" " 1 для ввода символа в связанный список как элемент списка\n" " 2 для удаления символа как элемента в связанном списке\n" " 3 для выхода из программы"); }
Объяснение кода листинга программы
- Вводится функция instructions, которая выводит приглашение для ввода выбора пользователя.
- Выводится текст приглашения с тремя вариантами выбора.
- Варианты выбора пронумерованы и обозначены соответствующими действиями: ввод символа в связанный список как элемент списка, удаление символа как элемента в связанном списке, выход из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д