实验:

编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:

(1)初始化顺序栈

(2)插入元素

(3)删除栈顶元素

(4)取栈顶元素

(5)遍历顺序栈

(6)置空顺序栈

分析:

栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。

对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top= =MAXNUM-1,栈满时,不能入栈; 否则出现空间溢出,引起错误,这种现象称为上溢。

出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。

注意

(1)顺序栈中元素用向量存放

(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点

(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置

顺序栈的实现:

#include <stdio.h>
#include <malloc.h>typedef int SElemType;
typedef int Status;
#define INIT_SIZE 100
#define STACKINCREMENT 10
#define Ok 1
#define Error 0
#define True 1
#define False 0
typedef struct
{SElemType *base;SElemType *top;int stacksize;
}SqStack;//初始化栈
Status InitStack(SqStack *s)
{s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType));if(!s->base){puts("存储空间分配失败!");return Error;}s->top = s->base;s->stacksize = INIT_SIZE;return Ok;
}//清空栈
Status ClearStack(SqStack *s){s->top = s->base;return Ok;}//栈是否为空
Status StackEmpty(SqStack *s){if(s->top == s->base)return True;elsereturn False;}//销毁栈
Status Destroy(SqStack *s)
{free(s->base);s->base = NULL;s->top = NULL;s->stacksize=0;return Ok;
}//获得栈顶元素
Status GetTop(SqStack *s, SElemType &e)
{if(s->top == s->base) return Error;e = *(s->top - 1);return Ok;
}//压栈
Status Push(SqStack *s, SElemType e)
{if(s->top - s->base >= s->stacksize)//栈满{s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType));if(!s->base){puts("存储空间分配失败!");return Error;}s->top = s->base + s->stacksize;//修改栈顶位置s->stacksize += STACKINCREMENT;//修改栈长度}*s->top++  = e;return Ok;
}//弹栈
Status Pop(SqStack *s, SElemType *e)
{if(s->top == s->base) return Error;--s->top;*e = *(s->top);return Ok;
}//遍历栈
Status StackTraverse(SqStack *s,Status(*visit)(SElemType)){SElemType *b = s->base;//此处不能直接用base或top移动,即不能改变原栈的结构SElemType *t = s->top;while(t > b)visit(*b++);printf("\n");return Ok;}Status visit(SElemType c){printf("%d ",c);return Ok;}

测试代码:

int main()
{SqStack a;SqStack *s = &a;SElemType e;InitStack(s);int n;puts("请输入要进栈的个数:");scanf("%d", &n);while(n--){int m;scanf("%d", &m);Push(s, m);}StackTraverse(s, visit);puts("");puts("8进栈后:");Push(s, 8);StackTraverse(s, visit);puts("");Pop(s, &e);printf("出栈的元素是:%d\n", e);printf("元素出栈后事实上并没有清除,依然存在于内存空间,所谓的出栈只是指针移动,出栈的元素是%d\n", *s->top);//判断出栈后元素是否还存在于内存中Destroy(s);return 0;
}

运行结果:

数据结构(严蔚敏)之三——顺序栈之c语言实现相关推荐

  1. [数据结构-严蔚敏版]P48栈的链式表示

    代码如下: #include <iostream> using namespace std;typedef int ElemType;typedef struct SNode {ElemT ...

  2. [数据结构-严蔚敏版]P46栈的顺序存储表示

    大家如果发现代码有错误,麻烦评论告知一下!!! 代码如下: #include <iostream> using namespace std;const int STACK_INIT_SIZ ...

  3. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...

    1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...

  4. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  5. 数据结构 严蔚敏 第二章 线性表

    数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...

  6. 【计算机】数据结构-严蔚敏/清华大学P3

    [计算机]数据结构-严蔚敏/清华大学P1 第二章    线  性表 线性结构 是 一个数据元素的有序(次序)集 线性结构的基本特征: 1.  集合中必存在唯一的一个"第一元素": ...

  7. 数据结构实验(严蔚敏版)----栈与队列

    数据结构(严蔚敏版)配套实验报告册--栈与队列基本操作 #include <stdio.h> #include <malloc.h> #include <stdlib.h ...

  8. 数据结构C++实现(顺序栈) 青岛大学王卓老师

    b站  <数据结构与算法基础(青岛大学-王卓)> 所用教材<数据结构C语言版第二版> 中国工信出版集团 人民邮电出版社出版 严蔚敏 编著 #include<iostrea ...

  9. 数据结构----严蔚敏

    最近一直想找一本纯数据结构的书来学习,找来找去都没有找到一本合适的书籍,相比之下国内的书籍之中,严蔚敏和吴伟民的还算是经典版了,很多国内其他数据结构教材都参考这本书的.但缺点是很多都是伪代码,对编程初 ...

最新文章

  1. 03系统多界面_领克03+冠军版定制版车联系统全网首测,性能+智能它都给你
  2. [转载] 七龙珠第一部——第125话 神将登场
  3. 【转】Xcode7.1环境下上架iOS App到AppStore 流程 -- 不错!!
  4. 如何在Java地毯下有效地清除问题
  5. spacy model
  6. [转载] Python判断分数等级if...elif...else
  7. python打包加壳_转:Python用PyInstaller打包笔记
  8. 苹果手机屏幕镜像搜索不到电视_手机自带的无线投屏总说找不到设备?
  9. 怎样将优酷视频编码KUX转MP4视频格式
  10. 正弦和余弦(角度到弧度)
  11. 《那些年啊,那些事——一个程序员的奋斗史》——77
  12. 2022Java后端学习主流知识学习系列(建议先收藏)
  13. Swoole入门指南:PHP7安装Swoole详细教程(一) 1
  14. 网络栈主要结构介绍(socket、sock、sk_buff,etc)
  15. UVA10765 Doves and bombs(双连通分量)
  16. SpringMVC整合Redis实战
  17. 诚之和:Python数据科学使用numpy求行均值
  18. 拆掉思维里的墙 读书笔记
  19. Symantec Endpoint Protection 中如何设置白名单
  20. 牛课网--直通BAT面试算法精讲课{10元优惠码}

热门文章

  1. 活动 | 5 位大咖,手把手教你玩转数据驱动精细化运营
  2. “读书人”的事儿,能叫抄吗?
  3. 周五话分析 | 你的梦想是什么?做一个懂 Session 分析的人
  4. 2.6 Go 读取CSV
  5. SQL ALTER TABLE 语句
  6. C#变量命名的几种方式—C#基础回顾
  7. Spring4 学习系列之——jdbc事务的基本实现和了解
  8. 香蕉派路由功Openwrt、Android功耗对照測试
  9. OpenStack在线迁移
  10. U3D-LookAt插值动画