Можно ли как-то изменить условие для enum на тоже самое для char? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть bstInsert, PKL и bstRemove
Листинг программы
  1. int main(void)
  2. {
  3. int i, maxBFS;
  4. char cmd[255], arg;
  5. BstNode *root = NULL;
  6. do
  7. {
  8. printf("Введите команду (h - справка):\n");
  9. scanf("%s", cmd);
  10. if (cmd[0] == '+')
  11. {
  12. scanf(" %c", &arg);
  13. if (arg >= 'A' && arg <= 'Z')
  14. {
  15. bstInsert(&root, arg - 'A');
  16. printf("Узел %c вставлен\n", arg);
  17. }
  18. else
  19. printf("Ошибка. Введена недопустимая буква\n");
  20. }
  21. else if (cmd[0] == '-')
  22. {
  23. scanf(" %c", &arg);
  24. if (arg >= 'A' && arg <= 'Z')
  25. {
  26. if (bstRemove(&root, arg - 'A'))
  27. printf("Узел %c удален\n", arg);
  28. else
  29. printf("Узел %c не найден\n", arg);
  30. }
  31. else
  32. printf("Ошибка. Введена недопустимая буква\n");
  33. }
  34. else if (cmd[0] == 'p')
  35. {
  36. PKL(&root, 0);
  37. }
  38. else if (cmd[0] == 't')
  39. {printf("HI\n");}
  40. else if (cmd[0] == 'h')
  41. {
  42. printf("================================\n");
  43. printf("Список команд:\n");
  44. printf("+ CHAR - вставить узел CHAR (A, B, ..., Z) в двоичное дерево\n");
  45. printf("- CHAR - удалить узел CHAR из двоичного дерева\n");
  46. printf("p - распечатать двоичное дерево\n");
  47. printf("t - выполнить задание над двоичным деревом\n");
  48. printf("q - завершить программу\n");
  49. printf("================================\n");
  50. }
  51. else if (cmd[0] != 'q')
  52. {
  53. printf("Неизвестная команда\n");
  54. }
  55. }
  56. while (cmd[0] != 'q');
  57. bstDestroy(&root);
  58. return 0;
  59. }
  60. void PKL(BstNode **node, const int level)
  61. {
  62. if (*node == NULL)
  63. {
  64. printf("Дерево пусто\n");
  65. return;
  66. }
  67. if ((*node)->_right != NULL)
  68. PKL(&(*node)->_right, level + 1);
  69. printf("%*s%c\n", level * 2, "", (*node)->_key + 'A');
  70. if ((*node)->_left != NULL)
  71. PKL(&(*node)->_left, level + 1);
  72. }
Листинг программы
  1. BstNode *bstInsert(BstNode **node, const kLetters key)
  2. {
  3. if (*node == NULL)
  4. {
  5. *node = (BstNode *)malloc(sizeof(BstNode));
  6. (*node)->_key = key;
  7. (*node)->_left = NULL;
  8. (*node)->_right = NULL;
  9. return *node;
  10. }
  11. else if ((*node)->_key == key)
  12. return *node;
  13. else if (key < (*node)->_key)
  14. return bstInsert(&(*node)->_left, key);
  15. else
  16. return bstInsert(&(*node)->_right, key);
  17. }
  18.  
  19. int bstRemove(BstNode **node, const kLetters key)
  20. {
  21. BstNode *repl = NULL, *parent = NULL, *tmp = *node;
  22. while (tmp != NULL && tmp->_key != key)
  23. {
  24. parent = tmp;
  25. if (key < tmp->_key)
  26. tmp = tmp->_left;
  27. else
  28. tmp = tmp->_right;
  29. }
  30. if (tmp == NULL)
  31. return 0;
  32. if (tmp->_left != NULL && tmp->_right == NULL)
  33. {
  34. if (parent != NULL)
  35. {
  36. if (parent->_left == tmp)
  37. parent->_left = tmp->_left;
  38. else
  39. parent->_right = tmp->_left;
  40. }
  41. else
  42. *node = tmp->_left;
  43. free(tmp);
  44. tmp = NULL;
  45. }
  46. else if (tmp->_left == NULL && tmp->_right != NULL)
  47. {
  48. if (parent != NULL)
  49. {
  50. if (parent->_left == tmp)
  51. parent->_left = tmp->_right;
  52. else
  53. parent->_right = tmp->_right;
  54. }
  55. else
  56. *node = tmp->_right;
  57. free(tmp);
  58. tmp = NULL;
  59. }
  60. else if (tmp->_left != NULL && tmp->_right != NULL)
  61. {
  62. repl = tmp->_right;
  63. if (repl->_left == NULL)
  64. tmp->_right = repl->_right;
  65. else
  66. {
  67. while (repl->_left != NULL)
  68. {
  69. parent = repl;
  70. repl = repl->_left;
  71. }
  72. parent->_left = repl->_right;
  73. }
  74. tmp->_key = repl->_key;
  75. free(repl);
  76. repl = NULL;
  77. }
  78. else
  79. {
  80. if (parent != NULL)
  81. {
  82. if (parent->_left == tmp)
  83. parent->_left = NULL;
  84. else
  85. parent->_right = NULL;
  86. }
  87. else
  88. *node = NULL;
  89. free(tmp);
  90. tmp = NULL;
  91. }
  92. return 1;
  93. }
  94. void bstDestroy(BstNode **node)
  95. {
  96. if (*node == NULL)
  97. return;
  98. if ((*node)->_left != NULL)
  99. bstDestroy(&(*node)->_left);
  100. if ((*node)->_right != NULL)
  101. bstDestroy(&(*node)->_right);
  102. free(*node);
  103. *node = NULL;
  104. }
все это для
Листинг программы
  1. typedef enum _kLetters
  2. {
  3. A = 0, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
  4. } kLetters;
  5. typedef struct _BstNode
  6. {
  7. kLetters _key;
  8. struct _BstNode *_left;
  9. struct _BstNode *_right;
  10. } BstNode;
  11. BstNode *bstInsert(BstNode **node, const kLetters key);
  12. int bstRemove(BstNode **node, const kLetters key);
  13. void bstDestroy(BstNode **node);
А нужно тоже самое для
Листинг программы
  1. typedef char _kLetters

Решение задачи: «Можно ли как-то изменить условие для enum на тоже самое для char?»

textual
Листинг программы
  1. kLetters

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы