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