码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用C语言实现顺序栈


    目录

    1.顺序栈

    2.顺序栈的相关操作

    (1)数据结构定义

    (2)初始化

    (3)重新申请空间和判空操作

    (4)入栈

    ​编辑

    (5)出栈和获取栈顶元素

    (6)主函数


    1.顺序栈

    栈:限定仅在表尾进行插入或删除操作的线性表。

    顺序栈:顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

     栈的应用:

    使用栈将十进制转换为八进制

    使用栈判断括号是否匹配

    使用栈判断是否为回文串

    注:栈的大小不可变,然而在我们的这个程序中当元素量达到MAXSIZE时,又重新申请空间,存储更多的元素(动态存储)。

    2.顺序栈的相关操作

    (1)数据结构定义

    1. #include
    2. #include
    3. #define MAXSIZE 5
    4. typedef int ElemType;
    5. typedef struct SqStack {
    6. ElemType *data;
    7. int top;
    8. int Maxsize;
    9. }SqStack;
    10. //菜单栏
    11. void MenuSqStack(){
    12. printf("----------1.入栈元素--------\n");
    13. printf("----------2.获取栈顶元素----\n");
    14. printf("----------3.弹出栈顶元素----\n");
    15. printf("----------4.重新初始化------\n");
    16. printf("----------5.退出操作--------\n");
    17. }

    (2)初始化

    1. //初始化
    2. void InitSqStack(SqStack&s){
    3. s.data=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
    4. if(s.data==NULL){
    5. printf("申请空间失败!\n");
    6. return ;
    7. }
    8. s.Maxsize=MAXSIZE;
    9. s.top=0;
    10. }

    (3)重新申请空间和判空操作

    1. //重新申请空间
    2. void reMalloc(SqStack&s,int len){
    3. ElemType*newbase=(ElemType*)realloc(s.data,(s.Maxsize+len)*sizeof(ElemType));
    4. s.data=newbase;
    5. s.Maxsize=s.Maxsize+len;
    6. }
    7. //判空
    8. bool StackEmpty(SqStack s){
    9. if(s.top==0){
    10. return true;
    11. }else{
    12. return false;
    13. }
    14. }

    (4)入栈

     

    注:如果当前栈空间已满,那么重新申请空间(在原来的基础上加上申请的空间)。

    1. //入栈
    2. void Push(SqStack&s,ElemType e){
    3. if(s.top>=s.Maxsize){
    4. printf("栈已满!\n");
    5. int len=0;
    6. printf("请输入申请空间的大小: ");
    7. scanf("%d",&len);
    8. reMalloc(s,len);
    9. return ;
    10. }
    11. s.data[s.top]=e;
    12. s.top=s.top+1;
    13. printf("入栈成功!\n");
    14. }

     

    (5)出栈和获取栈顶元素

    1. //出栈
    2. bool Pop(SqStack&s,ElemType&e){
    3. if(StackEmpty(s)){
    4. printf("栈已空!\n");
    5. return false;
    6. }
    7. s.top--;
    8. e=s.data[s.top];
    9. return true;
    10. }
    11. //获取栈顶元素
    12. void GetTopElem(SqStack s,ElemType&e){
    13. if(StackEmpty(s)){
    14. printf("栈已空!\n");
    15. return;
    16. }
    17. e=s.data[--s.top];
    18. }

    (6)主函数

    1. int main(){
    2. SqStack s;
    3. ElemType e;
    4. InitSqStack(s);
    5. while(1){
    6. int flag=0;
    7. bool popFlag=false;
    8. MenuSqStack();
    9. printf("请输入操作: ");
    10. scanf("%d",&flag);
    11. switch(flag){
    12. case 1:
    13. printf("请输入元素(-1_end): ");
    14. scanf("%d",&e);
    15. while(e!=-1){
    16. Push(s,e);
    17. printf("请输入元素(-1_end): ");
    18. scanf("%d",&e);
    19. }
    20. break;
    21. case 2:
    22. GetTopElem(s,e);
    23. printf("栈顶元素 = %d\n",e);
    24. break;
    25. case 3:
    26. popFlag=Pop(s,e);
    27. if(popFlag){
    28. printf("弹出栈顶元素 = %d\n",e);
    29. }
    30. break;
    31. case 4:
    32. InitSqStack(s);
    33. break;
    34. default:
    35. printf("结束操作\n");
    36. }
    37. if(flag==5){
    38. break;
    39. }
    40. }
    41. return 0;
    42. }

    测试

  • 相关阅读:
    Maixll-Dock 摄像头使用
    毕业设计选题uniapp+springboot新闻资讯小程序源码 开题 lw 调试
    Linux系统中ext3是什么?特点有哪些?
    【DELM分类】基于matlab麻雀搜索算法改进深度学习极限学习机数据分类【含Matlab源码 2235期】
    去重的方法
    PHY6252是一款超低功耗物联网蓝牙无线通信芯片
    89.(cesium篇)cesium聚合图(自定义图片)
    RocketMq最强总结 带你rocket从入门到入土为安
    华企盾的面试流程,华企盾招聘流程
    【组成原理-存储】Cache 和页式虚拟存储器
  • 原文地址:https://blog.csdn.net/Keep_Trying_Go/article/details/126268607
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号