Мне кажется всё лучше через класс сделать, вот что вышло
Stack.h
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| #ifndef STACK_H
#define STACK_H
class CStack
{
private:
int max;
int num;
int * stack;
public:
CStack(){max = 1;num = 0;stack = (int *)malloc(sizeof(int));}
CStack(int _max)
{
SetMax(_max);
}
void SetMax(int _max);
void release();
void push(int x);
int pop();
};
typedef CStack *LPCSTACK;
void CStack::SetMax(int _max)
{
if(0 < _max)
{
max = _max;
stack = (int *)realloc((void *)stack,max*sizeof(int));
}
}
void CStack::push(int x)
{
int i = num + 1;
if(!(max - 1 < i))
{
for(num = i;i > 0; i--)
stack[i] = stack[i - 1];
stack[0] = x;
}
else
printf("\r\nStack overflow!!!\r\n");
}
int CStack::pop()
{
int RetVal = stack[0];
for(int i = 0;i < num; i++)
stack[i] = stack[i + 1];
return RetVal;
}
void CStack::release()
{
max = 0;
num = 0;
stack = (int *)realloc((void *)stack,sizeof(int));
free((void *)stack);
}
#endif |
|
Основной модуль как-нибудь.cpp
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| #include <windows.h>
#include <stdio.h>
#include "stack.h"
LPCSTACK lps = new CStack();
void main()
{
printf("Enter steck size\n");
int max;scanf("%d",&max);
lps->SetMax(max);
printf("Enter 4 elements\n");
for(int i = 0,iEl; i < 4; i++)
{
scanf("%d",&iEl);lps->push(iEl);
}
printf("\nSteck have:\n");
for (i = 0; i < 4; i++)
{
iEl = lps->pop();
printf("\r\n%d ",iEl);
}
printf("1 - enter new numbers\r\n");
scanf("%d",&i);
if(i == 1)
main();
} |
|