#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
6:
int ElemType;
struct {
9: ElemType *base;
10: ElemType *top;
int stacksize;
12: } sqStack;
/*初始化栈*/
void initStack(sqStack *s)
15: {
/*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/
sizeof(ElemType));
18:
/*分配空间失败*/
20:
/*最开始,栈顶就是栈底*/
/*最大容量为STACK_INIT_SIZE */
23: }
/*入栈操作,将e压入栈中*/
void Push(sqStack *s, ElemType e) {
if(s->top - s->base >= s->stacksize) {
/*栈满,追加空间*/
28: s->base = (ElemType *)realloc(s->base, (s->stacksize +
sizeof(ElemType));
30:
/*存储分配失败*/
32:
33: s->top = s->base + s->stacksize;
/*设置栈的最大容量*/
35: }
36:
/*放入数据*/
38: s->top++;
39: }
/*出栈操作,用e将栈顶元素返回*/
void Pop(sqStack *s , ElemType *e) {
return;
43:
44: *e = *--(s->top);
45: }
46:
int n)
48: {
int r = 1, e;
50: sqStack stack;
/*初始化栈*/
52:
while(n != 0) {
/*保存现场n*/
55: n = n / 2;
56: }
57:
while(stack.top != stack.base)
59: {
60: Pop(&stack, &e);
61: r = r * e;
62: }
63:
return r;
65: }
66:
int main()
68: {
);
, f(5));
return 0;
72: }