c语言中栈区运用原理形象图,C语言实现使用动态数组来构造栈结构

我在面前一篇博客《C语言实现使用静态数组来构造栈结构》中使用了静态数组来模拟栈的操作。静态数组的大小是在代码中写死的。是存储在用户栈上面的,使用起来不灵活。在这篇博客中我会使用动态数组来构造。此时使用的内存是动态申请的。仅仅是在数组的创建和释放上面有区别,其它的使用都一样。注意:动态申请的内存须要我们手动去释放。由于这些占用的内存是在执行时堆上。不会在程序退出后释放。而存放在栈上面的会在程序退出后自己主动释放。代码上传至 https://github.com/chenyufeng1991/Stack_DynamicArray 。

(1)创建栈

//创建栈。也就是为数组分配数组

void createStack(int size){

if (staticSize == 0) {

staticSize = size;

stack = (int *)malloc(staticSize * sizeof(int));

if (stack == NULL) {

printf("数组内存分配失败

");

}

}

}

(2)销毁栈

//销毁这个栈,重点是释放这个栈占用的内存

void destroyStack(){

if (staticSize > 0) {

staticSize = 0;

free(stack);

stack = NULL;//数组置空

top_element = -1;//指针置空

}

}

(3)其它基本操作

//压入元素

void push(int value){

if (!isFull()) {

stack[++top_element] = value;

}

}

//弹出元素

void pop(){

if (!isEmpty()) {

top_element--;

}

}

//取栈顶元素

int top(){

if (!isEmpty()) {

return stack[top_element];

}

return -32768;

}

//判空

int isEmpty(){

return top_element == -1;

}

//判满

int isFull(){

return top_element == staticSize - 1;

}

//从栈顶開始打印元素

void printStack(){

int i = top_element;

printf("打印出动态数组堆栈里面的值: ");

if(i == -1){

printf("这是个空栈");

}else{

while(i!= -1){

printf("%d ",stack[i--]);

}

}

printf("

");

}

(4)測试代码

int main(int argc, const char * argv[]) {

createStack(50);

printStack();

push(6);push(3);push(9);push(1);push(4);

printf("栈中压入数据后:

");

printStack();

pop();pop();

printf("弹出数据后。栈内的元素为:

");

printStack();

printf("取栈顶的元素:%d

",top());

destroyStack();

printStack();

return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值