001
#include<stdio.h>
002
#include<stdlib.h>
003
#define STACK_SIZE 100 //栈初始大小
004
#define AUTO_INCREMENT 10 //自增大小
005
006
typedef
struct
{
007
int
*base;
008
int
*top;
009
int
stacksize;
010
}sqStack;
011
012
013
014
015
void
init(sqStack *s) {
016
s->base = (
int
*)
malloc
(STACK_SIZE*
sizeof
(
int
));
017
if
( !s->base )
exit
(0);
018
s->top = s->base;
019
s->stacksize = STACK_SIZE;
020
}
021
022
023
024
void
push(sqStack *s,
int
e) {
025
if
( s->top - s->base == s->stacksize ) {
026
s->base = (
int
*)
realloc
(s->base, AUTO_INCREMENT);
027
if
(!s->base)
exit
(0);
028
s->top = s->base + s->stacksize;
029
s->stacksize += AUTO_INCREMENT;
030
}
031
*(s->top) = e;
032
s->top++;
033
}
034
035
036
037
038
int
pop(sqStack *s) {
039
if
( s->top == s->base )
return
-1;
040
return
*(--s->top);
041
}
042
043
044
045
046
int
getSize(sqStack s) {
047
return
(s.top - s.base);
048
}
049
050
051
052
053
void
clearStack(sqStack *s) {
054
s->top = s->base;
055
}
056
057
058
059
060
void
destoryStack(sqStack *s) {
061
if
( s->top == s->base )
return
;
062
while
( s->top != s->base ) {
063
free
(s->top);
064
s->top--;
065
}
066
free
(s->top);
067
s->top = s->base = NULL;
068
s->stacksize = 0;
069
}
070
071
072
073
074
void
showStack(sqStack s) {
075
if
( s.top == s.base )
return
;
076
--s.top;
077
while
( s.top != s.base ) {
078
printf
(
"%d "
, *(s.top));
079
s.top--;
080
}
081
printf
(
"%d\n"
, *(s.top));
082
}
083
084
int
main() {
085
sqStack s;
086
int
i,size;
087
init(&s);
088
push(&s, 3);
089
push(&s, 4);
090
push(&s, 5);
091
showStack(s);
092
093
size = getSize(s);
094
printf
(
"curSize:%d\n"
, size);
095
096
i = pop(&s);
097
printf
(
"%d\n"
, i);
098
099
i = pop(&s);
100
printf
(
"%d\n"
, i);
101
102
i = pop(&s);
103
printf
(
"%d\n"
, i);
104
105
i = pop(&s);
106
printf
(
"%d\n"
, i);
107
return
0;
108
}