【数据结构严蔚敏】 第三章 栈基本操作C语言实现

注意部分:

1.*S.top++ = e;= *S=e ; S.top++ ;
若要实现指针所指地址的元素值++,语句应该是(*a)++而不是*a++
2.关于指针
普通变量如 int a,&a表示变量a所在地址,a表示a所在地址中存储的值
指针变量如 int * a ,a表示a中存储的一个int型变量的地址,*a表示在a存储的地址中存储的值 ,&a依然表示该指针所在地址(不是a中存储的地址),。
2.关于free的问题
free与malloc语句对应,作用于指针,malloc为指针分配专用内存空间,使用free语句后,该内存空间不再为指针专有,它可能会被再次利用,但是指针所指仍然是这个地址,依然能够进行操作,所以在free后需要对指针置为NULL,防止误操作指针出现意外情况。
free(p);p=NULL;配合使用

代码部分

vs2017

stack.h部分

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define TRUE    1
#define FALSE   0
#define OK      1
#define ERROR   0
#define INFEASLBLE  -1
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10  //存储空间分配增量typedef int Status;
typedef int SElemType;typedef struct{SElemType * base;SElemType * top;int stacksize;
}SqStack;//构造一个空栈
Status InitStack(SqStack &S);//销毁一个栈
Status DestroyStack(SqStack &S);//清空一个栈
Status ClearStack(SqStack &S);//若栈为空栈,则返回TRUE,否则返回FALSE
Status StackEmpty(SqStack &S);//返回S的元素个数,即栈的长度
int StackLength(SqStack S);//若栈不空,用e返回S的栈顶元素,并返回OK;否则返回ERROR
Status GeTop(SqStack S, SElemType &e);//插入元素e为新的栈顶元素
Status Push(SqStack &S, SElemType &e);//若栈不空,删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
Status Pop(SqStack &S, SElemType e);//从栈底到栈顶依次对栈中每个元素调用函数visit()。一旦visit失败,操作失败
Status StackTraverse(SqStack S, Status(*visit)(SElemType*));

stack.c部分

#include "stack.h"Status InitStack(SqStack & S)
{S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base) exit(OVERFLOW);S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;
}Status DestroyStack(SqStack & S)
{free(S.base);S.base = NULL;       //free后需要将指针赋NULL,否则可能造成问题S.stacksize = 0;return OK;
}Status ClearStack(SqStack & S)
{S.top = S.base;return OK;
}Status StackEmpty(SqStack & S)
{if (S.base == S.top)return TRUE;return FALSE;
}int StackLength(SqStack S)
{return S.top-S.base;
}Status GeTop(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)exit(OVERFLOW);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return  OK;}Status Pop(SqStack & S, SElemType &e)
{if (S.base == S.top)return ERROR;e = *--S.top;return OK;
}Status StackTraverse(SqStack S, Status(*visit)(SElemType*))
{SElemType *cur;cur = S.base;while (!(cur == S.top)) {if (!visit(cur)) return ERROR; cur++;}return OK;
}

test部分

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include"stack.h"int visit(SElemType* cur) {//显示元素值cout << *cur;return OK;
}
int main() {SqStack S;int e=0;InitStack(S);    //初始化链表for (int i = 0; i < 5; i++) {  //圧入五个元素Push(S, i);}StackTraverse(S, visit);       //遍历栈,visit定义为输出函数。cout <<endl<< "删除栈顶元素" << endl;Pop(S, e);                     //删除栈顶元素StackTraverse(S, visit);cout << endl << "输出栈的元素个数" << endl;cout << StackLength(S)<<endl; //输出栈的元素个数cout << "清空栈" << endl;ClearStack(S);cout << "判断栈是否为空,1为空" << endl;cout << StackEmpty(S)<<endl;system("pause");return 0;
}

输出结果

数据结构严蔚敏 栈基本操作 C语言实现相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 数据结构严蔚敏清华大学pdf_2019年清华大学自动化系控制工程专业大数据方向考研经验分享...

    基本情况(以下内容仅代表个人观点) 我目前就读于西南某双非石油工程专业,2019考研报考清华大学自动化系大数据工程专业,一志愿复试被刷,侥幸调剂录取至微电子系.初试总分346分(政治-63 + 英语一 ...

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

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

  8. 栈C/C++实现(数据结构严蔚敏版)

    1.头文件:stack.h #include<iostream> #include<malloc.h> using namespace std; typedef int Sta ...

  9. 数据结构(严蔚敏老师c语言第2版)

    文章目录 1.顺序表 2.链表 3.栈 3.1顺序栈 3.2链栈 4.队列 4.1顺序循环队列 4.2链式队列 1.顺序表 顺序表的特点:(增.删慢,查找快) 1.随机访问,可以在O(1)时间内找到第 ...

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

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

最新文章

  1. 36、重分布配置实验之route-map
  2. caffe 提取特征并可视化(已测试可执行)及在线可视化
  3. oracle诊断,Oracle 诊断事件列表
  4. Linux内存管理段页
  5. 前端学习(3015):vue+element今日头条管理--自定义验证规则
  6. Oracle技术之ASM上恢复STANDBY数据库出现ORA-15173错误
  7. Android通过tcpdump抓包
  8. .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证
  9. 分布式服务的幂等性设计,值得学习!
  10. jxta-P2P学习
  11. MDPI期刊-引用文献格式-调整记录
  12. SCI 论文缩写使用心得
  13. 编写项目工作说明书(SOW)
  14. 将英文字符串转换为数字
  15. (7,4)汉明码编码译码及计算最小码距——基于MATLAB编程
  16. 连环锁 POJ - 1832(格雷码与二进制)
  17. 请说说自己对鲁迅本人他作品的了解计算机,26 回忆鲁迅先生课堂实录及点评
  18. Win10鼠标点一下文件夹或文件没有选中的那个蓝色,但还是能正常用,比如双击跟右键,点一下也有详细信息
  19. tp计算机术语是什么意思,tp是什么意思呀?谁能把术语给我解释一下? – 手机爱问...
  20. 【Apache Spark 】第 5 章Spark SQL 和 DataFrames:与外部数据源交互

热门文章

  1. C3P0连接池的配置方式
  2. LinkedIn应用开发系列(三) --认证Request token
  3. 360刷Android8,360N6安卓8.1新版刷机包(完整固件升级包安卓8.1)
  4. php关联微信支付宝,php实现微信和支付宝支付
  5. python自动下载邮件附件
  6. 大学英语综合教程二 Unit 7 课文内容英译中 中英翻译
  7. MIT-JOS系列5:用户环境(一)
  8. rgba颜色和16进制颜色互相转换
  9. 最新小米线刷救砖工具分享+支持全系通用
  10. [2]Selenium学习系列---- FirePath的安装和使用