栈的部分操作

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
#include <stdio.h>
#include <stdlib.h>
//函数结果状态码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT
typedef int Status;
typedef int elemtype;
typedef struct{
elemtype *top;
elemtype *base;
int stacksize;
}Sqstack;
Status InitStack(Sqstack *S)
{
S->base = (elemtype *)malloc(STACK_INIT_SIZE*sizeof(elemtype));
if(!S->base) exit(OVERFLOW);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}//初始化栈
Status Stackempty(Sqstack *S)
{
if(S->top == S->base)
return TRUE;
else
return FALSE;
}
Status Push(Sqstack *S,elemtype *e)
{
if(S->top-S->base>=S->stacksize)
{
S->base = (elemtype*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(elemtype));
if(!S->base) exit(OVERFLOW);
S->top = S->base + S->stacksize;
S.stacksize = S.stacksize + STACKINCREMENT;
}
*S->top++ = e;
return OK;
}
Status Pop(Sqstack *S,elemtype *e)
{
if(Stackempty(Sqstack *S))
{
return ERROR;
}
e = *–S->top;
return OK;
}
int main()
{
return 0;
}“