rsZheng4916 2022-01-11 22:26 采纳率: 60%
浏览 22
已结题

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呢?

  • 写回答

2条回答 默认 最新

  • 五一编程 2022-01-11 23:14
    关注
    
    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 已采纳回答 1月12日
  • 创建了问题 1月11日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装