69,372
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 512
#define OK 1
#define ERROR 0
typedef int SElem;
struct Stack{
SElem base[STACKSIZE];
SElem *top;
};
int initStack(struct Stack *S);
int stackLength(struct Stack S);
int pop(struct Stack *S, SElem *e);
int push(struct Stack *S, SElem e);
int main(int argc, char *argv[])
{
int e;
int *p = &e;
int flag = 1;
struct Stack S;
initStack(&S);
printf("%p--%p\n", S.top, S.base);
int i;
for (i = 0; i < 3; ++i){
push(&S, i);
printf("%p\n", S.top);
}
do {
pop(&S, p);
printf("%p--", S.top);
printf("%d", *p);
flag = stackLength(S);
printf("--%d\n", flag);
} while (flag);
system("PAUSE");
return 0;
}
int initStack(struct Stack *S)
{
S->top = S->base;
return OK;
}
int stackLength(struct Stack S)
{
return S.top - S.base;
}
int push(struct Stack *S, SElem e)
{
if (S->top < S->base + STACKSIZE - 1){
*S->top = e;
S->top++;
return OK;
}
return ERROR;
}
int pop(struct Stack *S, SElem *e)
{
if (S->top > S->base){
*e = *--S->top;
return OK;
}
return ERROR;
}
int stackLength(struct Stack S); //这个传的是结构体的副本
int stackLength(struct Stack S)
{
printf("\nstactlength:%p--%p\n",S.top,S.base); //跟踪
return S.top - S.base;
}
printf("--%d\n", flag);
getch(); //加这句跟踪
int stackLength(struct Stack *S);
flag = stackLength(&S);
int stackLength(struct Stack * S)
{
return S->top - S->base;
}