Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ? - C (СИ)
Формулировка задачи:
Программа выводит второй стек, состоящий из положительных элементов первого стека. Преподаватель сказал, что я сделал программу, как массив, а мне нужно сделать со структурами, как это сделать ?
Вот код :
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #define LEN 21
- int g_count1 = 0;
- int g_count2 = 0;
- int* g_v = NULL;
- int* g_v2 = NULL;
- int n = 105;
- void push(int* gv, int& g_count, int val)
- {
- if (g_count >= LEN) return;
- gv[g_count++] = val;
- }
- bool pop(int* gv, int& g_count, int* pval)
- {
- if (g_count <= 0 || pval == NULL) return 0;
- if (pval != NULL) *pval = gv[--g_count];
- return 1;
- }
- int main(int argc, char* argv[])
- {
- if (g_v == NULL)
- {
- g_v = new int[LEN+1];
- g_v2 = new int[LEN+1];
- }
- int i = -10;
- while (i < 11) push(g_v,g_count1,i++);
- int val = 0;
- while (pop(g_v,g_count1,&val))
- {
- if (val > 0){
- push(g_v2, g_count2, val);
- }}
- while (pop(g_v2,g_count2,&val))
- printf("%d\n", val);
- printf("\n");
- if (g_v != NULL && g_v2 != NULL)
- {
- delete[] g_v;
- delete[] g_v2;
- }
- getch();
- return 0;
- }
Решение задачи: «Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ?»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct Node
- {
- int data;
- struct Node *next;
- } Node;
- typedef struct Stack
- {
- Node *top;
- int counter;
- } Stack;
- void InitStack(Stack *s);
- void DelStack(Stack *s);
- int IsEmpty(const Stack *s);
- void Push(Stack *s, const int val);
- void Pop(Stack *s);
- int Size(const Stack *s);
- int* Top(const Stack *s);
- int main()
- {
- int i;
- Stack s;
- InitStack(&s);
- for (i=0; i < 5; i++)
- Push(&s, i);
- printf("Stack size is %d\n", Size(&s));
- while (Top(&s) && printf("Stack top: %d\n", *Top(&s)))
- Pop(&s);
- DelStack(&s);
- return 0;
- }
- void InitStack(Stack *s)
- {
- s->top = NULL;
- s->counter = 0;
- }
- void DelStack(Stack *s)
- {
- while (!IsEmpty(s))
- Pop(s);
- }
- int IsEmpty(const Stack *s)
- {
- return s->top == NULL;
- }
- void Push(Stack *s, const int val)
- {
- Node *tmp = s->top;
- s->top = malloc(sizeof(Node));
- s->top->data = val;
- s->top->next = tmp;
- s->counter++;
- }
- void Pop(Stack *s)
- {
- Node *tmp = NULL;
- if (IsEmpty(s))
- return;
- tmp = s->top;
- s->top = s->top->next;
- free(tmp);
- s->counter--;
- }
- int Size(const Stack *s)
- {
- return s->counter;
- }
- int* Top(const Stack *s)
- {
- return !s || !s->top ? NULL : &s->top->data;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д