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("数组内存分配失败\n");
}
}
}
(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("\n");
}
(4)測试代码
int main(int argc, const char * argv[]) {
createStack(50);
printStack();
push(6);push(3);push(9);push(1);push(4);
printf("栈中压入数据后:\n");
printStack();
pop();pop();
printf("弹出数据后。栈内的元素为:\n");
printStack();
printf("取栈顶的元素:%d\n",top());
destroyStack();
printStack();
return 0;
}
C语言实现使用动态数组来构造栈结构的更多相关文章
- C语言基础 - 实现动态数组并增加内存管理
用C语言实现一个动态数组,并对外暴露出对数组的增.删.改.查函数 (可以存储任意类型的元素并实现内存管理) 这里我的编译器就是xcode 分析: 模拟存放 一个 People类 有2个属性 字符串类型 ...
- (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)
目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...
- 二 基于java动态数组手写栈
package dataStucture2.stack; import dataStucture2.array.MyDynamicArray; /** * 基于动态数组手写栈 * 设计时,栈中仅栈顶对 ...
- 数据结构笔记--栈的总结及java数组实现简单栈结构
杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于 ...
- C语言实现使用动态数组实现循环队列
我在上一篇博客<C语言实现使用静态数组实现循环队列>中实现了使用静态数组来模拟队列的操作. 因为数组的大小已经被指定.无法动态的扩展. 所以在这篇博客中,我换成动态数组来实现. 动态数组能 ...
- 基于自定义的动态数组实现一个栈(Java语言)
关于动态数组,参见我的上一篇关于动态数组的博文https://www.cnblogs.com/inu6/p/11717129.html 1.什么是栈? (1)只能从一端添加元素,也只能从一端取出元素, ...
- 纯C语言(C89)实现动态数组
起因 工作很少接触纯C项目,业余写着玩玩,不断雕琢 目标 纯C实现动态数组,提供方便易用泛型接口,避免依赖 实现 完全封装,隐藏结构体细节,不支持栈创建 拷贝存储,轻微性能代价换来易用性 vector ...
- 使用java语言实现一个动态数组(详解)(数据结构)
废话不多说,上代码 1.从类名开始(我真是太贴心了) public class Array<E> 首先数组类需要带有泛型,这个不多说.需要注意的是在java中,数组只能存放同一个类型的. ...
- python构造栈结构
栈:是一种先进后出的数据结构:本片文章,我们用python的面向对象来构造这样的数据结构. 栈中的每一个数据除了存储当前的数值外,还存储着当前数值下一个数据的类型(注意不是下一个数据的数值). cla ...
随机推荐
- 关于MyBatis sqlSession的一点整理
工作中,需要学习一下MyBatis sqlSession的产生过程,翻看了mybatis-spring的源码,阅读了一些mybatis的相关doc,对mybatis sqlSession有了一些认知和 ...
- 解决浏览器不兼容websocket
本例使用tomcat 7.0的websocket做为例子. 1.新建web project.2.找到tomcat 7.0 lib 下的 catalina.jar,tomcat-coyote.jar添加 ...
- 洛谷—— P2234 [HNOI2002]营业额统计
https://www.luogu.org/problem/show?pid=2234 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业 ...
- 16.用Spring Boot颠覆Java应用开发
转自:https://www.cnblogs.com/aishangJava/p/5971288.html Java开发概述: 使用Java做Web应用开发已经有近20年的历史了,从最初的Servle ...
- 关于python中矩阵的实现和矩阵的转置
python中矩阵的实现是靠序列,,, 序列有很多形式, 其实矩阵是现实生活中的东西,把现实生活中的结构转换到程序中. 就需要有个实现的方法,而这种路径是多种多样的. 下面给出一个把矩阵转换成pyth ...
- Altium Designer画异型焊盘的步骤
注:如果要画的是过孔,就需要加入底层的
- 【CS Round #48 (Div. 2 only)】Game of Chance
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 在这里写题解 [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc++.h> using n ...
- POJ 1012 Joseph 约瑟夫问题
http://poj.org/problem?id=1012 早上去图书馆复习苦逼的复习....万恶的数逻.T T我还要自我安慰的说复习完了奖励回来刷水题~ 10点多的时候外面校运会大吼撑杆跳的那个. ...
- 9、基于Linux的v4l2视频架构应用编写
Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设备文件名为: /dev/video0 . 视频采集基本步骤流程如下: 打开视频设备,设置视频设备属性及采 ...
- gdb查看线程堆栈信息
查看堆栈:gdb -quiet -batch -ex='thread apply all bt' -p pid查看运行位置:gdb -quiet -batch -ex='thread apply al ...