Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ? - C (СИ)

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

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

Программа выводит второй стек, состоящий из положительных элементов первого стека. Преподаватель сказал, что я сделал программу, как массив, а мне нужно сделать со структурами, как это сделать ? Вот код :
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #define LEN 21
  4. int g_count1 = 0;
  5. int g_count2 = 0;
  6. int* g_v = NULL;
  7. int* g_v2 = NULL;
  8. int n = 105;
  9. void push(int* gv, int& g_count, int val)
  10. {
  11. if (g_count >= LEN) return;
  12. gv[g_count++] = val;
  13. }
  14. bool pop(int* gv, int& g_count, int* pval)
  15. {
  16. if (g_count <= 0 || pval == NULL) return 0;
  17. if (pval != NULL) *pval = gv[--g_count];
  18. return 1;
  19. }
  20. int main(int argc, char* argv[])
  21. {
  22. if (g_v == NULL)
  23. {
  24. g_v = new int[LEN+1];
  25. g_v2 = new int[LEN+1];
  26. }
  27. int i = -10;
  28. while (i < 11) push(g_v,g_count1,i++);
  29. int val = 0;
  30. while (pop(g_v,g_count1,&val))
  31. {
  32. if (val > 0){
  33. push(g_v2, g_count2, val);
  34. }}
  35. while (pop(g_v2,g_count2,&val))
  36. printf("%d\n", val);
  37. printf("\n");
  38.  
  39. if (g_v != NULL && g_v2 != NULL)
  40. {
  41. delete[] g_v;
  42. delete[] g_v2;
  43. }
  44. getch();
  45. return 0;
  46. }

Решение задачи: «Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ?»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct Node
  5. {
  6.     int data;
  7.     struct Node *next;
  8. } Node;
  9.  
  10. typedef struct Stack
  11. {
  12.     Node *top;
  13.     int counter;
  14. } Stack;
  15.  
  16. void InitStack(Stack *s);
  17. void DelStack(Stack *s);
  18. int  IsEmpty(const Stack *s);
  19. void Push(Stack *s, const int val);
  20. void Pop(Stack *s);
  21. int  Size(const Stack *s);
  22. int* Top(const Stack *s);
  23.  
  24.  
  25. int main()
  26. {
  27.     int i;
  28.     Stack s;
  29.     InitStack(&s);
  30.  
  31.     for (i=0; i < 5; i++)
  32.         Push(&s, i);
  33.     printf("Stack size is %d\n", Size(&s));
  34.     while (Top(&s) && printf("Stack top: %d\n", *Top(&s)))
  35.         Pop(&s);
  36.  
  37.     DelStack(&s);
  38.     return 0;
  39. }
  40.  
  41. void InitStack(Stack *s)
  42. {
  43.     s->top = NULL;
  44.     s->counter = 0;
  45. }
  46.  
  47. void DelStack(Stack *s)
  48. {
  49.     while (!IsEmpty(s))
  50.         Pop(s);
  51. }
  52.  
  53. int IsEmpty(const Stack *s)
  54. {
  55.     return s->top == NULL;
  56. }
  57.  
  58. void Push(Stack *s, const int val)
  59. {
  60.     Node *tmp = s->top;
  61.     s->top = malloc(sizeof(Node));
  62.     s->top->data = val;
  63.     s->top->next = tmp;
  64.     s->counter++;
  65. }
  66.  
  67. void Pop(Stack *s)
  68. {
  69.     Node *tmp = NULL;
  70.     if (IsEmpty(s))
  71.         return;
  72.     tmp = s->top;
  73.     s->top = s->top->next;
  74.     free(tmp);
  75.     s->counter--;
  76. }
  77.  
  78. int Size(const Stack *s)
  79. {
  80.     return s->counter;
  81. }
  82.  
  83. int* Top(const Stack *s)
  84. {
  85.     return !s || !s->top ? NULL : &s->top->data;
  86. }

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


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

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

10   голосов , оценка 4.3 из 5

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

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

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