代码部分

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define INITSIZE 4#define INCREMENT 2typedef struct stack {    int *base;    int top;    int size;}STACK, *PSTACK;void init(PSTACK);bool is_empty(PSTACK);bool is_full(PSTACK);bool push(PSTACK, int);void traverse(PSTACK);bool pop(PSTACK, int *);// 栈有效元素(节点)为top + 1void clear(PSTACK);void destroy(PSTACK);void destroy(PSTACK p){    if (is_empty(p))        return;    free(p->base);    p->top = -1;    p->size = 0;}// 只是更新栈顶,栈所占内存还在void clear(PSTACK p){    printf("清空栈\n");    if (is_empty(p))        return;    p->top = -1;}bool pop(PSTACK p, int *pVal){    printf("pop...");    if (is_empty(p)){        printf("栈空!\n");        return false;    }    *pVal = p->base[p->top--];    printf("成功 值为%d\n", *pVal);    return true;}void traverse(PSTACK p){    printf("遍历(显示顺序栈顶=>栈底)\n");    if (is_empty(p)) {        printf("栈空!\n");        return;    }    for (int i=p->top; i >=0; --i) {        printf("%d\n", p->base[i]);    }}bool push(PSTACK p, int val){    printf("push %d", val);    if (is_full(p)) {        p->base = (int *)realloc(p->base, sizeof(int) * (INCREMENT + p->size));        p->size += INCREMENT;        if (! p->base) {            printf(" 栈满自动扩展空间失败!\n");            return false;        }        else            printf(" 栈满自动扩展空间");    }    p->base[++p->top] = val;    printf(" 成功\n");    return true;}bool is_full(PSTACK p){    // 因为是数组下标从0开始    if (p->top == p->size - 1)        return true;    return false;}bool is_empty(PSTACK p){    if (p->top == -1)        return true;    return false;}void init(PSTACK p){    p->base = (int *)malloc(sizeof(int) * INITSIZE);    p->top = -1;    p->size = INITSIZE;}int main(void){    STACK S;    int val;    init(&S);    push(&S, 1);    push(&S, 2);    push(&S, 3);    push(&S, 4);    push(&S, 5);    push(&S, 6);    traverse(&S);    pop(&S, &val);    pop(&S, &val);    pop(&S, &val);    traverse(&S);    clear(&S);    return 0;}
©著作权归作者所有:来自51CTO博客作者sndapk的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得

赞赏

0人进行了赞赏支持

更多相关文章

  1. dock 无法正常启动
  2. mysql数据查询关于字段为100000-130000-130400-130426的数据格式
  3. Elasticsearch 之 监控告警通知
  4. shell实现MySQL全量备份
  5. mysql查询指定字段以","拼接字符串作为结果返回
  6. 上万字详解Spark Core(建议收藏)
  7. Elasticsearch 之 条件查询
  8. maven 插件用于打不同环境的版本包
  9. compiler插件,定义编译打包的jdk版本

随机推荐

  1. Android学习笔记——入门框
  2. android 简易任务管理器源码
  3. android:screenOrientation的说明
  4. Android Studio导入项目常出现的问题
  5. android超炫的图片浏览器
  6. android常用函数参数补充
  7. TextView跑马灯效果
  8. android 滚动条
  9. Android 4.0 SDK下载
  10. Android - 自定义SeekBar