第1个函数用于创建堆栈,用户像它传递一个参数,用于指定数组的长度。第2个函数用于删除堆栈,为了避免内存泄露,这个函数是必须的。 这些声明可以添加到stack.h中,尽管使用静态数组实现堆栈时,并没有这两个函数。注意,用户在使用静态数组类型的堆栈时并不存在错误地调用这两个函数的危险,因为它们在那个模块中并不存在。
(1)创建栈 //创建栈。也就是为数组分配数组 void createStack(int size){ if (staticSize == 0) { staticSize = size; stack = (int *)malloc(staticSize * sizeof(int)); if (stack == NULL) { printf("数组内存分配失败\n"); } } } (2)销毁栈 //销毁这个栈,重点是释放这个栈占用的内存 ...
一、静态数组堆栈 在静态数组堆栈中,STACK_SIZE表示堆栈所能存储的元素的最大值,用top_element作为数组下标来表示堆栈里面的元素,当top_element == -1的时候表示堆栈为空;当top_element == STACK_SIZE - 1的时候表示堆栈为满。push的时候top_element加1,top_element == 0时表示第一个堆栈元素;pop的时候top_...
栈的实现有两种方式一种是数组栈一种是链式栈,相比较而言使用数组去实现栈更优一些,因为栈的特点就是在栈顶增加和删除元素,而栈顶说白了也就是在数据的尾部增加和删除,如果使用链表来实现栈的话我们就要先去找尾在增加,而且如果要删除数据那么对于单向链表的话更加麻烦,所以这里我们使用数组去实现栈 使用数组实现...
1 首先定义堆栈结构体,结构体中包含当前堆栈位置、堆栈容量以及堆栈数组指针。2 初始化堆栈,传入容量参数。函数中初始化堆栈结构体,并根据容量参数,初始化堆栈数组。最后设置当前堆栈位置为0,堆栈容量为传入容量参数。 3 堆栈的第一个操作,Push。向堆栈顶部放置一个数据。我们在实现时也比较简单,将数据添加到...
静态数组的生命周期与作用域相关,而动态数组的生命周期由程序员控制。 在使用动态数组时,需要注意合理地分配和释放内存,以避免内存泄漏和访问无效内存的问题。 静态数组 静态数组是指在编译时确定大小的数组,其大小在程序运行期间不能改变。 在C 语言中,静态数组的内存分配在栈区,通常使用方括号[]来定义。
出数据也在栈顶。 图解: (2)栈的两种实现方式 链式栈:用链表的结构来实现栈。 顺序栈:用数组的结构来实现栈。 优劣对比: 【1】单向链式结构的出栈入栈(删除插入)效率比较低,因为我们要先找到尾结点再行插入删除,可以通过双向链表或者将单向链表的头结点当作栈顶来处理。
一、栈:基本介绍 本章总结 二、栈:使用数组实现一个栈 三、栈:使用链表实现一个栈 四、栈:反转一个字符串或者反转一个链表(使用栈来实现) 4.1、通过栈反转字符串 4.2、通过栈反转链表 五、检查括号的匹配性(使用栈来实现) 六、前缀、中缀、后缀的基本概念 七、栈:前缀和后缀表达式的求值(使用栈来实现) 7.1...
C 语言编程中声明一个基本数组如下: int main() { // 声明一个容纳 3000 个整数的数组intmy_array[3000]; } 以上代码做了两件事: ●在栈区开辟内存空间。准确说来是在函数 main 的栈区空间开辟一个 3000 * sizeof(int) 个字节的内存空间。通过这种方式开辟的内存空间会在程序运行到当前区块终点时(对本...
1.定义一个栈的结构体 这里我们实现的是动态的栈typedef int STDateType; //方便数据类型的替换typedef struct Stack{STDateType* a; //存储数据的数组int top;int capacity; //容量}ST; 2.栈的初始化 这里top的初始化不同,top含义就不同;1.如果top初始化给0,则每次入栈后top就会++;当入第一个数据时...