当前位置: 首页 > news >正文

数据结构c语言版第二版(严蔚敏)第三章笔记

目录

顺序栈 

存储结构

InitSqStack(SqStack &S);

DestorySqStack(SqStack &S);

StackEmpty(SqStack &S);

StackLength(SqStack &S);

GetTop(SqStack &S);

Push(SqStack &S);

Pop(SqStack &S);

StackTraverse(SqStack &S);

链式栈 

存储结构

InitSqStack(SqStack &S);

DestorySqStack(SqStack &S);

StackEmpty(SqStack &S);

StackLength(SqStack &S);

GetTop(SqStack &S);

Push(SqStack &S);

Pop(SqStack &S);

StackTraverse(SqStack &S);


栈是一种限定仅仅在表尾进行插入或者删除操作的线性表,因此对于栈来说,表尾端拥有着特殊的含义,称为栈顶,相应的,表头称为栈底,不含任何元素的栈称为空栈,栈中元素的特点是后进先出,可以理解为打枪时的子弹,装在弹夹里的子弹总是后填入的先射出

顺序栈 

基于顺序存储结构实现栈

存储结构

此段中的Elemtype为int

typedef struct
{
	int *base;
	int *top;
	int stacksize;
}SqStack;

InitSqStack(SqStack &S);

void InitSqStack(SqStack &S)
{
	S.base = new int[MAXSIZE];
	if(!S.base)
	{
		printf("栈动态开辟内存操作失败\n");
		return; 
	}
	S.top = S.base;
	S.stacksize = MAXSIZE;
}

DestorySqStack(SqStack &S);

void DestoryStack(SqStack &S)
{
	delete S.base;
	S.stacksize = 0;
	S.base = S.top = NULL;
}

StackEmpty(SqStack &S);

bool StackEmpty(SqStack &S)
{
	if(S.base == S.top)return true;
	else return false;
}

StackLength(SqStack &S);

int StackLength(SqStack &S)
{
	return (S.top - S.base);
}

GetTop(SqStack &S);

int GetTop(SqStack &S)
{
	if(S.top != S.base)return *(S.top - 1);
	else 
	{
		printf("栈为空,取栈顶元素失败\n");
		return -1; 
	}
}

Push(SqStack &S,int e);

void Push(SqStack &S,int e)
{
	if(S.top - S.base == S.stacksize)
	{
		printf("栈已满,无法推入新的元素\n");
		return;
	}
	*S.top = e;
	S.top ++ ;
}

Pop(SqStack &S,int &e);

void Pop(SqStack &S,int &e)
{
	if(S.base == S.top)
	{
		printf("删除失败,栈已制空\n");
		return;
	}
	-- S.top;
	e = *S.top;
}

StackTraverse(SqStack &S);

void Print(SqStack &S)
{
	int *p = S.top - 1;
	while(p >= S.base)
	{
		cout << *p << endl;
		p -- ;
	}
}

链式栈 

基于链式存储结构实现栈

存储结构

typedef struct StackLNode
{
	int data;
	struct StackLNode *next;
}StackLNode,*LinkStack;

InitSqStack(SqStack &S);

void InitLinkStack(LinkStack &S)
{
	S = NULL; 
} 

DestorySqStack(SqStack &S);

void DestoryStack(LinkStack &S)
{
	StackLNode *p = S;
	ClearStack(S);
	delete p;
}

StackEmpty(SqStack &S);

bool StackEmpty(LinkStack &S)
{
	if(S == NULL)return true;
	else return false;
}

StackLength(SqStack &S);

int StackLength(LinkStack &S)
{
	int j = 0;
	StackLNode *p = S;
	while(p)
	{
		j ++ ;
		p = p -> next;
	}
	return j;
}

GetTop(SqStack &S);

int GetTop(LinkStack &S)
{
	if(S != NULL)return S -> data;
	else 
	{
		printf("该栈为空,取栈顶元素失败\n");
		return -1; 
	}
}

Push(SqStack &S,int e);

void Push(LinkStack &S,int e)
{
	StackLNode *p = new StackLNode;
	p -> data = e;
	p -> next = S;
	S = p;
}

Pop(SqStack &S,int &e);

void Pop(LinkStack &S,int &e)
{
	if(S == NULL)
	{
		printf("该栈为空,出栈失败\n");
		return;
	}
	e = S -> data;
	StackLNode *p = S;
	S = S -> next;
	delete p;
}

StackTraverse(SqStack &S);

void StackTraverse(LinkStack &S)
{
	if(S == NULL)
	{
		printf("该栈为空\n");
		return;
	}
	StackLNode *p = S;
	while(p)
	{
		cout << p -> data << ' ';
		p = p -> next;
	}
} 

相关文章:

  • 羊了个羊,但是Python简(li)单(pu)版
  • 【软件测试】测试用例的设计方法
  • 二叉树的遍历问题
  • FPGA/HDL 人员开发利器-TerosHDL(开源 IDE)
  • 《谁动了我的奶酪》阅读笔记
  • 2023秋招--腾讯天美--游戏客户端--一面面经
  • 跨模态学习能力再升级,EasyNLP电商文图检索效果刷新SOTA
  • JavaScript 中什么时候使用 Map 更合适(二)
  • 【统计学习|书籍阅读】第五章 决策树 p55-p75
  • 【GlobalMapper精品教程】009:DSM过滤植被和房屋并生成等高线案例教程
  • web前端期末大作业:我的家乡广东(html+css布局)div制作
  • 【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
  • 【DNS服务器的配置】实操
  • mysql索引下推与回表
  • 安装Scala
  • SegmentFault for Android 3.0 发布
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • echarts花样作死的坑
  • Golang-长连接-状态推送
  • input的行数自动增减
  • laravel 用artisan创建自己的模板
  • Lucene解析 - 基本概念
  • Python学习之路13-记分
  • React-生命周期杂记
  • Redis字符串类型内部编码剖析
  • Ruby 2.x 源代码分析:扩展 概述
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Swift 中的尾递归和蹦床
  • Terraform入门 - 3. 变更基础设施
  • 第2章 网络文档
  • 分享一份非常强势的Android面试题
  • 关于springcloud Gateway中的限流
  • 聊聊hikari连接池的leakDetectionThreshold
  • 少走弯路,给Java 1~5 年程序员的建议
  • 十年未变!安全,谁之责?(下)
  • 突破自己的技术思维
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #、%和$符号在OGNL表达式中经常出现
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (6)STL算法之转换
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (function(){})()的分步解析
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Oracle)SQL优化技巧(一):分页查询
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)JAVA使用POI操作excel
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (六)激光线扫描-三维重建
  • (十) 初识 Docker file
  • (已解决)什么是vue导航守卫
  • (转)创业的注意事项
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu