C语言版 顺序栈的清空问题

#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;
}

运行结果:

img

Status clearStack(SqStack *s) {
    if(s->base)  s->top = s->base;
    return OK;
}
clearStack(&stack);