Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ? - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д