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

第三章小结

第三章学习小结

(一)学习小结:栈和队列:栈和队列算是操作受限的线性表,它们的基本操作集是线性表操作集的子集

(1)栈:基本概念名称:栈顶(top)、栈底(base);插入和删除在栈的应用中称为入栈(Push)和出栈(Pop),入栈和出栈只在栈顶进行。根据存储结构,可分为顺序栈(顺序存储结构)和链栈(链式存储结构)。原则:后进先出

①顺序栈,基本操作有:栈的初始化、入栈、出栈和取栈顶元素。实现这些操作的算法如下:

#define MAXSIZE 100

typedef struct
{
 Selement *base;//栈底指针
 Selement *top;//栈顶指针
 int stacksize;//栈可使用的最大空间
}SqStack;
Status initStack (SqStack &S)//创建一个栈S,并置空
{
 S.base=new Selement [MAXSIZE];//为栈动态申请一个MAXSIZE大小的空间
 if(S.base==NULL)  return false;//内存空间分配失败,返回false
 S.top=S.base; //将栈置空
 S.stacksize=MAXSIZE;//将栈的空间长度置为MAXSIZE
}
Status Push(SqStack &S,Selement e)//入栈
{
 if(S.top-S.base==MAXSIZE) return false;//判断栈满,若栈满,返回false
 *S.top=e;//将栈顶元素置e
 ++*S.top; //修改栈顶指针
}
Status Pop(SqStack &S,Selement &e)//出栈
{
 if(S.top==S.base) return false;//判断栈空,若栈空,返回false
 --*S.top; //修改栈顶指针
 e=*S.top;//用e返回栈顶元素
}
Status GetPop(SqStack S)//取栈顶元素
{
 if(S.top!=S.base) return *(S.top-1);//栈非空。返回栈顶元素
}

入栈:①首先要判断是否栈满(S.top-S.base==MAXSIZE):栈满。②先将栈顶元素置为e,栈顶指针再加1

出栈:①判断是否栈空(S.top==S.base):栈空。②栈顶指针减1,用e存放栈顶元素值

②链栈:基本操作与顺序栈差不多,需要注意的是入栈不需要像顺序栈一样要判断是否栈满,只需要为新结点动态申请存储空间,但出栈是同样需要判断是否栈空

*栈应用的例子:(1)数制的转换。求余得到的数字放入栈的顺序与转换后的数制的高位到低位的顺序刚好相反,可以利用栈的后进先出原则。(2)括号匹配问题。基本思路:遍历字符串后,是左括号的话,入栈,遇到右括号是分两种情况:若栈空,匹配失败;栈非空时,若遇到匹配的右括号,左括号就出栈

(2)队列:①基本概念名称:队头(front)、队尾(rear)、入队和出队,队头出队,队尾入队;一样可以有顺序表示和链式表示,是先进先出原则。

①循环队列(队列的顺序表示):由于队头出队、队尾入队的限制,队列会出现假溢出现象,即可以使用的空间并没有使用完,但因为元素下标越界出现非法操作,因此采用循环队列。队空的条件:Q.front==Q.rear,队满的条件:(Q.rear+1)%MAXSIZE==Q.front(采取少用一个元素的空间的办法)

需要注意的是;在非空队列中,队头指针始终指向队头元素,而队尾元素始终指向队尾元素的下一个位置

入栈需要判断是否队满,出队要判断是否队空

②链队:同链栈一样,入队无需判断队满,只要为新结点申请存取空间;出队要判断队空

(2)课本上是算法,对于一些基本操作的实现还是需要去修改完成后才是程序,再者就是对于实在做不对的编程题应该及时需求帮助,或者是多去注释语句,帮助自己寻找错误。

(3)分享的资料:暂时无,因为在这一次学习过程中,除了看书,就是去寻求同学帮助

(4)对于顺序结构的实现和链式结构的实现还不够熟练,一部分是自己没有去对比两种存储结构的实现的算法,还有就是没有多打代码帮助理解。

(5)接下来的目标:继续巩固学习实现两种存储结构,去考虑用不同的方法实现同一个问题,帮助理解栈和队列,例如括号匹配问题等。

 

转载于:https://www.cnblogs.com/F254236/p/10627875.html

相关文章:

  • 微信小程序_(组件)icon、text、rich-text、progress四大基础组件
  • 处理机调度算法
  • 上周热点回顾(3.25-3.31)
  • 软工第三次团队作业 - 功能规格说明书
  • [北航软工]技术规格说明书
  • PAT甲级1068 Find More Coins【01背包】
  • 【BZOJ2125】—最短路(圆方树+树链剖分)
  • Java学习笔记-正则表达式
  • centos7.5搭建zabbix3.4.x以及mysql定制化监控
  • java ReentrantLock
  • C学习笔记-makefile
  • cocos2dx笔记1:概述
  • 易语言QQpost加好友源码
  • Ansible-----常用功能
  • 2019春第六周学习编辑总结
  • [笔记] php常见简单功能及函数
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • const let
  • Hexo+码云+git快速搭建免费的静态Blog
  • javascript 哈希表
  • JavaScript服务器推送技术之 WebSocket
  • Java程序员幽默爆笑锦集
  • Java读取Properties文件的六种方法
  • mysql常用命令汇总
  • scrapy学习之路4(itemloder的使用)
  • Spark学习笔记之相关记录
  • 创建一个Struts2项目maven 方式
  • 高度不固定时垂直居中
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 将 Measurements 和 Units 应用到物理学
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 容器镜像
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​第20课 在Android Native开发中加入新的C++类
  • # Apache SeaTunnel 究竟是什么?
  • #laravel 通过手动安装依赖PHPExcel#
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)PySpark3:SparkSQL编程
  • (力扣)循环队列的实现与详解(C语言)
  • (力扣题库)跳跃游戏II(c++)
  • (转)Linq学习笔记
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)Linux网络编程入门
  • .NET使用存储过程实现对数据库的增删改查
  • .NET项目中存在多个web.config文件时的加载顺序
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • [20190401]关于semtimedop函数调用.txt
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C#]C#学习笔记-CIL和动态程序集
  • [IE9] IE9 RC版下载链接
  • [Machine Learning] Learning with Noisy Labels
  • [nginx] 网上最全面nginx教程(近100篇文章整理)
  • [No000016]为什么假期计划总是做不到?
  • [objective-c]关于KVC--KVO--KVB