c语言 int top,顺序栈(C语言,静态栈)

代码部分数组

#include

#include

#include

#define INITSIZE 4

#define INCREMENT 2

typedef 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 + 1

void 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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值