#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
/* 顺序栈的存储结构 */
typedef struct{
int *top; // 栈顶指针
int *base; // 栈底指针
int stackSize; // 最大容量
}SqStack;
/**
* @brief 初始化顺序栈
*/
Status initStack(SqStack *s){
s->base = (ElemType*)malloc(sizeof(ElemType));
if(!s->base) return ERROR;
s->top = s->base;
s->stackSize = MAXSIZE;
return OK;
}
Status clearStack(SqStack s){
if(s.base) s.top = s.base;
return OK;
}
Status destroyStack(SqStack *s){
// if(s->base)
}
/**
* @brief 入栈
*/
Status push(SqStack *s,int e){
if((s->top-s->base) == s->stackSize) return ERROR;
*s->top = e;
s->top++;
}
/**
* @brief 出栈
*/
Status pop(SqStack *s,int e){
if(s->top == s->base) return ERROR;
--s->top;
e = *s->top;
}
/**
* @brief 遍历顺序栈
*/
Status displayStack(SqStack s){
if(s.top == s.base) return ERROR;
while(s.base < s.top){
printf("%d ",*(s.base++));
}
printf("\n");
}
/**
* @brief Get the Length object 获取顺序栈的长度
*/
int getLength(SqStack s){
return s.top - s.base;
}
int main(){
SqStack stack;
ElemType e;
// 初始化
initStack(&stack);
// 入栈
push(&stack,5);
push(&stack,8);
push(&stack,0);
push(&stack,3);
push(&stack,9);
// 遍历
printf("displayStack: ");
displayStack(stack);
// 清空 获取长度
clearStack(stack);
printf("getLength: %d\n",getLength(stack));
}
请问此处执行【清空】函数后,为什么获取长度不是0呢?
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
/* 顺序栈的存储结构 */
typedef struct{
int *top; // 栈顶指针
int *base; // 栈底指针
int stackSize; // 最大容量
}SqStack;
/**
* @brief 初始化顺序栈
*/
Status initStack(SqStack *s){
s->base = (ElemType*)malloc(sizeof(ElemType));
if(!s->base) return ERROR;
s->top = s->base;
s->stackSize = MAXSIZE;
return OK;
}
Status clearStack(SqStack &s){
if(s.base) s.top = s.base;
return OK;
}
Status destroyStack(SqStack *s){
// if(s->base)
return OK;
}
/**
* @brief 入栈
*/
Status push(SqStack *s,int e){
if((s->top-s->base) == s->stackSize) return ERROR;
*s->top = e;
s->top++;
}
/**
* @brief 出栈
*/
Status pop(SqStack *s,int e){
if(s->top == s->base) return ERROR;
--s->top;
e = *s->top;
}
/**
* @brief 遍历顺序栈
*/
Status displayStack(SqStack s){
if(s.top == s.base) return ERROR;
while(s.base < s.top){
printf("%d ",*(s.base++));
}
printf("\n");
}
/**
* @brief Get the Length object 获取顺序栈的长度
*/
int getLength(SqStack s){
return s.top - s.base;
}
int main(){
SqStack stack;
ElemType e;
// 初始化
initStack(&stack);
// 入栈
push(&stack,5);
push(&stack,8);
push(&stack,0);
push(&stack,3);
push(&stack,9);
// 遍历
printf("displayStack: ");
displayStack(stack);
// 清空 获取长度
clearStack(stack);
printf("getLength: %d\n",getLength(stack));
return 0;
}
运行结果:
Status clearStack(SqStack *s) {
if(s->base) s->top = s->base;
return OK;
}
clearStack(&stack);