1、存储结构

#define Stack_Init_Size 100
#define StackIncrement 10
typedef int ElemType;
typedef int Status;// 方式一(本文采取)
typedef struct {ElemType *base; // 栈底指针ElemType *top; // 栈顶指针int stacksize; // 栈的最大容量
} SqStack;// 方式二
typedef struct {int data[MaxSize];int top;
} SeqStack;

2、函数列表

  • Status InitStack(SqStack *S) 初始化栈
  • Status GetTopStack(SqStack *S, ElemType *e) 获取栈顶元素,参数e存放栈顶元素的值
  • Status PushStack(SqStack *S, ElemType e) 进栈,将元素e入栈
  • Status PopStack(SqStack *S, ElemType *e) 出栈,出栈的元素存放在参数e中
  • Status EmptyStack(SqStack *S) 判断栈是否为空
  • Status LengthStack(SqStack *S) 获取栈的实际长度
  • Status DestroyStack(SqStack *S) 销毁栈
  • Status StackTraverse(SqStack *S) 遍历栈,打印每个元素

3、完整代码

#include <stdio.h>
#include <stdlib.h>#define Stack_Init_Size 10 // 初始化栈的最大长度
#define StackIncrement 10 // 若栈最大空间不够时,需要增加的长度
typedef int ElemType;
typedef int Status;typedef struct {ElemType *base; // 栈底指针ElemType *top; // 栈顶指针int stack_size; // 栈的最大长度
} SqStack;// 初始化栈
Status InitStack(SqStack *S) {// 分配初始空间S->base = (ElemType *) malloc(Stack_Init_Size * sizeof(ElemType));if (!S->base) {exit(0);}S->top = S->base; /// 栈顶与栈底相同S->stack_size = Stack_Init_Size; // 栈的最大长度等于初始长度return 1;
}// 判断栈是否为空,只需要判断栈顶指针与栈底指针是否相同即可
Status EmptyStack(SqStack *S) {return S->base == S->top;
}// 获取栈的实际长度,栈顶减去栈底指针即为栈的长度
Status LengthStack(SqStack *S) {if (S->top == S->base) {return 0;}return (Status) (S->top - S->base);
}// 获取栈顶的元素,参数e用来存放栈顶的元素
Status GetTopStack(SqStack *S, ElemType *e) {if (S->top == S->base) {return 0;} *e = *(S->top - 1);return 1;
}// 进栈,参数e是要进栈的元素
Status PushStack(SqStack *S, ElemType e) {// 若栈的最大长度不会够用时,重新开辟,增大长度if (S->top - S->base >= S->stack_size) {S->base = (ElemType *)realloc(S->base, (S->stack_size + StackIncrement) * sizeof(ElemType));if (!S->base) {return 0;}// 栈顶指针为栈底指针加上栈之前的最大长度S->top = S->base + S->stack_size;// 栈当前的最大长度等于栈之前的最大长度与增加的长度之和S->stack_size += StackIncrement;}*S->top++ = e; // 先赋值,后栈顶指针上移return 1;
}// 出栈,参数e用来存放出栈的元素
Status PopStack(SqStack *S, ElemType *e) {if (S->base == S->top) {return 0;}*e = *--S->top; // 栈顶指针先下移,后赋值return 1;
}// 销毁栈,释放栈空间,栈顶栈底指针置为NULL,长度置为0
Status DestroyStack(SqStack *S) {free(S->base);S->base = S->top = NULL;S->stack_size = 0;return 1;
}// 遍历栈,依次打印每个元素
Status StackTraverse(SqStack *S) {ElemType *p;if (S->top == S->base) {printf("Stack is NULL.\n");return 0;}p = S->top;// 由栈顶依次向下遍历while (p > S->base) {p--;printf("%d ", *p);}printf("\n");return 1;
}int main() {SqStack q, *S;S = &q;int i, n, e;printf("Creat a NULL Stack :\n");InitStack(S);printf("input the length of the Stack :\n");scanf("%d", &n);for (i = 1; i <= n; i++) {scanf("%d", &e);PushStack(S, e);}printf("Is the stack NULL?\n");if (EmptyStack(S)) {printf("Yes!\n");} else {printf("No!\n");}printf("The length of stack is %d.\n", LengthStack(S));printf("The stack is :\n");StackTraverse(S);GetTopStack(S, &e);printf("The top data is %d.\n", e);printf("input the data to the stack :\n");scanf("%d", &e);PushStack(S, e);printf("The new stack is :\n");StackTraverse(S);printf("Delete the top data : ");e = PopStack(S, &e);printf("%d\n", e);printf("The new stack is :\n");StackTraverse(S);printf("Destroy the stack :\n");DestroyStack(S);StackTraverse(S);return 0;
}

顺序栈基本操作的C语言实现(含全部代码实现)--- 数据结构之顺序栈相关推荐

  1. 数据结构-顺序表基本操作(C语言实现)

    参考书:王道考研数据结构 //函数的声明 SqList InitList(l);                                    //初始化一个顺序表 void PrintfLi ...

  2. 线性表之顺序表基本操作(C语言实现,详细注释版)

    有不懂的可以问我,把自己练习编写的代码在这里和大家分享下.如有错误欢迎指正. 编写不易,喜欢的话,点个赞吧

  3. 基于FPGA的数字电子琴——数电小系统设计【数字电子技术】(使用Vivado中的verilog语言)含piano代码文件(全)

    目录 一.电路功能描述 二.方案设计 1. 总体设计方案 2. 对原理框图或程序流程图做出简单解释 3. 各模块介绍 3.1 音频驱动模块 3.2 LED显示模块 3.3 数码管显示模块 3.4 矩阵 ...

  4. 数据结构:顺序栈基本操作(入栈和出栈)C语言详解(转载)by解学武

    本文为解学武教程的免费章节 什么是顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如 ...

  5. 顺序栈基本操作(入栈和出栈)C语言详解

    #include <stdio.h> #include <stdlib.h> /*顺序栈基本操作(入栈和出栈)C语言详解栈的具体实现(1)顺序栈(2)链栈栈的应用(1)回退 ( ...

  6. c语言堆栈基本代码入栈出栈_顺序栈基本操作(入栈和出栈)C语言详解

    顺序,即用{1,2,3,4},存储状态如 图 1 顺序表存储 {1,2,3,4} 同样,使用栈存储结构存储 {1,2,3,4},其存储状态如图 2 所示: 图 2 栈结构存储 {1,2,3,4} 通过 ...

  7. 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)

    1 #include 2 #include 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 10//存储空间分配增量 ...

  8. 数据结构之【栈】的基本操作C语言实现

    引题:        很多人都把[栈]描述成[弹匣],但我总感觉有点不恰当,因为弹匣从上端[装弹]之后,子弹总是在匣的上层:而元素[进栈]之后,总在栈的下面.        我觉得还是描述成[从下往上 ...

  9. 数据结构《顺序栈》知识点详解+C语言完整代码-超详细

    顺序栈 栈 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 C语言代码实现 1. 顺序栈的表示 2. 结构体 3.初始化 4.入栈 5.出栈 6. 取栈顶元素 7.求长 8 ...

  10. 数据结构动态顺序字符串基本操作实验_技术连载:数据结构 - 栈

    栈 只有一个口,可以进数据也可以出数据,一种典型的先进后出.后进先出的数据结构: 栈 栈的基本操作 入栈 入栈操作需要考虑当前栈是否以及满了,如果满了是选择扩容还是返回入栈失败: 入栈成功则需要更新栈 ...

最新文章

  1. python进程的注意点(进程之间不共享全局变量、主进程会等待所有的子进程执行结束再结束)
  2. Java元组Tuple使用实例--转载
  3. vs2010无法查看自定义的普通变量(CXX0017:错误:没有找到符号)
  4. mysql数据库怎么安装建表_mysql数据库安装及建表注意事项
  5. 自动生成 指定范围日期 生成字符串格式时间日期 --计算连续时间 SQL
  6. Qt::WindowModal和Qt::ApplicationModal的区别
  7. 最近找工作面的面试题目汇总(一)
  8. 用Apache HttpClient实现URL重定向
  9. windows.old可以删除吗_C盘里的文件夹都有何用?可以删除吗?哪些可以删除?
  10. asp.net 安全
  11. 安装教程之postman下载及安装
  12. NPN三极管导通数据总结
  13. Kali 2020 DHCP获取动态ip和静态IP设置方法
  14. PS技巧一-----镜头光晕
  15. EXCEL中定义名称
  16. 关于虚拟机闪退及无法启动的问题
  17. Turbopack 很火? 那么就从前端角度看 Rust
  18. 联想小新 Pad和联想小新 Pad Pro有什么区别 哪个好详细性能配置对比
  19. Selenium一些特殊情况的处理:失去焦点、点击不生效、长页面处理、先触发事件才能动态加载的元素、日期输入
  20. raid卡缓存对硬盘性能_我们怎么解决机械硬盘既慢又容易坏的问题

热门文章

  1. centos 计算器_在Linux命令行中使用计算器的5个命令
  2. SAI:Switch Abstraction Interface
  3. 69个网盘搜索引擎资源(最全)
  4. QQ音乐(15.9.0)去广告绿色版
  5. python安卓app下载_【Python教学视频手机下载】Python教学app下载 v1.0 安卓版-趣致软件园...
  6. vb计算机器,科学计算器vb代码
  7. PDF 文档解除密码
  8. Spring Boot 菜鸟教程 1 HelloWorld
  9. eplan 2.7安装过程中multikey黄色感叹号解决办法
  10. SSM房屋租赁管理系统