logo

您所在位置网站首页 > 海量文档  > 教育文化 > 教育文化

第4部分数据结构与算法提高班【参考】.docx 59页

本文档一共被下载: ,您可全文免费在线阅读后下载本文档。

  • 支付并下载
  • 收藏该文档
  • 百度一下本文档
  • 修改文档简介
全屏预览

下载提示

1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
特别说明: 下载前务必先预览,自己验证一下是不是你要下载的文档。
  • 上传作者 小雁子(上传创作收益人)
  • 发布时间:2016-11-27
  • 需要金币80(10金币=人民币1元)
  • 浏览人气
  • 下载次数
  • 收藏次数
  • 文件大小:541.26 KB
下载过该文档的会员
你可能关注的文档:
第 4 部分 数据结构与算法提高班24.1 栈、队列、单调队列、单调栈(高天宇)24.2 堆、并查集、加权并查集(高天宇)54.3 倍增算法(高天宇)84.4 基础数论(高天宇)104.5 前缀和与差分,STL 选讲(高天宇)134.6 NOIP 历年题目分析与讲解(高天宇)174.7 NOIP 模拟赛(李佳蔚)254.8 比赛策略和骗分技巧(李佳蔚)254.9 搜索及优化(张晨)324.10 最短路、最小生成树(张晨)374.11 线段树与树状数组(谢兴宇)444.12 背包 dp、简单树型 dp(马龙)474.13 动态规划及常见优化(马龙)56第 4 部分 数据结构与算法提高班4.1 栈、队列、单调队列、单调栈(高天宇)4.1.1 栈 栈的定义栈(stack)是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运 算。这一端被称为栈顶,相对地,把另一端称为栈底。 计算机中的栈计算机中调用函数时,函数信息便保存在堆栈当中。 栈的实现 .1 栈的存储DataType stack_data[STACK_SIZE]; // 通常 DataType 都是 int int top = 0; // 栈顶指针,初始时栈为空 .2 判断栈是否为空bool isStackEmpty(){return top == 0;} .3 判断栈是否为满bool isStackFull(){return top == STACK_SIZE – 1;} .4 进栈操作bool push(DataType x){if (isStackFull()) return false; stack_data[++top] = x;return true;} .5 出栈操作查询+删除:bool pop(DataType &x){if (isStackEmpty()) return false; x = stack_data[top--];return true;}只查询:DataType get_top() { return stack_data[top]; } 栈的应用4.1.2 队列 队列的定义队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除(查询)操作, 而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除(查询)操作的端称为 队头。 队列的实现 .1 队列的存储DataType queue_data[QUEUE_SIZE]; // DataType 通常为 intint front = 0, tail = 0; // 队首和队尾指针。队首指针指向第一个元素,队 尾指针指向最后一个元素后面的位置。 .2 判断队列是否为空bool isQueueEmpty(){return front == tail;} .3 判断队列是否为满bool isQueueFull(){return tail >= QUEUE_SIZE;} .4 入队(插入)bool push(DataType x){if (isQueueFull()) return false; queue_data[tail++] = x;} .5 出队(查询,删除)查询(无空队列检查):DataType get_front() { return queue_data[front]; }删除:bool pop(){if (isQueueEmpty()) return false; front++;return true;} .6 循环队列我们注意到,进行 pop(弹出)操作后,队列数组前端有许多空闲下来的存储空间,如 果能将其利用则队列存储效率更高。我们可以用『循环队列』的方式来节省空间。当我们的队首或者队尾指针变成 QUEUE_SIZE 的时候,将其对 QUEUE_SIZE 取模变为0。这样就实现了让队列『首尾相接』,循环起来了。这样判断队满的条件不再是 tail>=QUEUE_SIZE,而是 tail==front。不过这样和判断队 空的条 件冲 突了。 我们 可以 通过牺 牲一 个存 储单元 的方 式, 将判断 队满 的条 件改成tail==front-1。只需要将原先程序里面 front++和 tail++的部分改成 front = (front + 1) % QUEUE_SIZE和 tail = (tail + 1) % QUEUE_SIZE 即可。 .7 双端队列即可以在两端进行删除/查询/插入操作的队列,在普通队列的基础上稍加升级即可。 队列的应用 4.1.3 单调队列,单调栈 何为单调队列和单调栈单调队列/单调栈,顾名思义,即保证内部元素单调(从大到下或者从小到大)的队列 或者栈。我们只要在插入新元素的时候

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片

“原创力文档”前称为“文档投稿赚钱网”,本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。原创力文档是网络服务平台方,若您的权利被侵害,侵权客服QQ:3005833200 电话:19940600175 欢迎举报,上传者QQ群:784321556