1.顺序栈初始化无非就是给栈分配连续的内存空间,base是栈底指针,在上面提到过,它用来指示一段连续的内存空间的首地址,也就是用来初始化。 2.分配空间不意味着一定会有那么多空间,所以判断也不可缺少。 3.分配空间后,base和top的地址应该一致,此时top还没有移动。 2.3压栈 int push(SqStack * S,int elem) ...
在栈的实现中,我们不妨借鉴顺序表的实现方式来实现栈,因此顺序栈的数据类型我们可以描述为: //顺序栈的数据类型基本格式#defineMaxSize10//定义栈中元素的最大个数typedefstructSqStack{ElemType data[MaxSize];//存放在栈中的元素inttop;//栈顶指针}SqStack;//ElemType——存放元素的数据类型//top——栈顶元素...
1.7 返回栈顶元素 这里我们考虑top = 0,所以top每次添加完元素后,指向的是下一个栈元素的位置,所以输出栈顶元素的时候需要将其减1。 // 返回栈顶元素 StackDataType StackTop(ST* ps) { // 断言 assert(ps); // 不为空 assert(!StackEmpty(ps)); return ps->a[ps->...
先送栈顶元素出栈,再将栈顶指针前移一位。 *代码测试 1/*顺序栈23实现操作:4*1 判空5*2 入栈6*3 出栈7*4 读栈顶元素(栈顶元素依然保留)89*/10#include <iostream>11#include <cstdio>12usingnamespacestd;1314typedefintElemType;15constintMaxSize =10;1617typedefstructSNode {18ElemType data[MaxSiz...
顺序栈(静态栈)示意图 2. 代码实现 #include<stdio.h>#include<stdlib.h>// 包含了 malloc 和 exit 函数#include<stdbool.h>// 包含 bool 类型// 栈typedefstructstack{int*base;// 存储的是数组第一个元素的地址intlen;// 当前栈所能容纳的最大元素的个数intcnt;// 当前栈中的有效元素的个数(初始值...
出栈:栈的删除,出数据也在栈顶。 这个结构其实就像一个弹夹,只能在一端进行数据的插入和删除。 这里强调一下:栈的特点就是,后进先出! 这非常关键! 有关实现的思考 在实现之前,我们要思考: 首先,这是一个线性表实现的,所以我们有两个选择:顺序表,也就是数组实现;或者链表实现。
栈大家都知道是按照后进先出的规则处理数据的,其实栈的实现并不难,如果你了解基本数据结构中的线性表,那么栈对你来说已经很简单了,因为栈受限于线性表的基本操作,可以说栈的基本操作是线性表的子集,线性表分为顺序表与链表,因此栈也分为顺序栈与链栈,顺序顾名思义就是数据元素的物理地址都相邻,而链栈不连续,...
//顺序栈的表示和实现 //用顺序栈实现数制转换、括号匹配检查、行编辑程序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 ...
顺序栈的表示与实现 用C语言表示栈的顺序结构 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { SElemType *base; // 栈底指针(始终指向栈底) SElemType *top; // 栈顶指针 int stacksize; // 当前栈的最大容量 } SqStack; ...