一、链表:list

1、用处及优势

链表对于一段数据的插入和删除操作具有很大的优势。而在数组、vector中,对于数据的插入与删除操作往往需要较高的时间复杂度。

2、STL中list的常见用法
 cout << "预设长度和值" << endl;list<int>l1(10, 0);for (list<int>::iterator it = l1.begin(); it != l1.end(); it++){cout << *it << ' ';}cout << endl;list<int>li;li.push_back(2);li.push_back(1);li.push_back(3);li.push_back(3);li.push_back(5);li.push_back(7);li.push_front(2);li.push_front(1);li.push_front(2);li.push_front(1);li.push_front(1);li.pop_back();li.pop_front();cout << "原链表" << endl;for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;cout << "在某元素前插入" << endl;for (list<int>::iterator it = li.begin(); it != li.end(); it++)//在某元素前插入{if (*it == 2)li.insert(it, 9);}for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;cout << "在某元素前区间插入" << endl;for (list<int>::iterator it = li.begin(); it != li.end(); it++)//在某元素前区间插入{if (*it == 2)li.insert(it, 2,8);}for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;cout << "单点修改" << endl;list<int>::iterator  a;int i = 1;for (list<int>::iterator it = li.begin(); it != li.end(); it++,i++)//单点修改{if (i == 2)*it=0;}for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;cout << "单点删除" << endl;i = 1;for (list<int>::iterator it = li.begin(); it != li.end(); it++, i++)//单点删除{if (i == 2)a=it;}li.erase(a);for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;cout << "区间删除" << endl;i = 1;list<int>::iterator  l,r;for (list<int>::iterator it = li.begin(); it != li.end(); it++, i++)//区间删除{if (i == 2)l = it;if (i-1 == 5)r = it;}li.erase(l,r);for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;cout << "删除某一个元素" << endl;li.remove(2);  //删除某一个元素for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;cout << "倒转链表" << endl;li.reverse();for (list<int>::iterator it = li.begin(); it != li.end(); it++){cout << *it << ' ';}cout << endl;

运行结果

预设长度和值
0 0 0 0 0 0 0 0 0 0
原链表
1 2 1 2 2 1 3 3 5
在某元素前插入
1 9 2 1 9 2 9 2 1 3 3 5
在某元素前区间插入
1 9 8 8 2 1 9 8 8 2 9 8 8 2 1 3 3 5
单点修改
1 0 8 8 2 1 9 8 8 2 9 8 8 2 1 3 3 5
单点删除
1 8 8 2 1 9 8 8 2 9 8 8 2 1 3 3 5
区间删除
1 9 8 8 2 9 8 8 2 1 3 3 5
删除某一个元素
1 9 8 8 9 8 8 1 3 3 5
倒转链表
5 3 3 1 8 8 9 8 8 9 1

二、双向队列:deque

1、用处及优势

在之前介绍的队列queue中,只支持对队列开头的输出操作与对队尾的输入操作。而双向队列则对于队首队尾都可以进行入队和出队操作

2、常见函数使用

对比queue,主要区别在于在pop与push函数后要加上front或者back

 deque<int>dq;dq.push_back(2);dq.push_back(3);dq.push_back(1);dq.push_front(6);dq.push_front(7);dq.push_front(2);for (deque<int>::iterator it = dq.begin(); it != dq.end(); it++)cout << *it << ' ';cout << endl;dq.pop_back();dq.pop_front();for (deque<int>::iterator it = dq.begin(); it != dq.end(); it++)cout << *it << ' ';cout << endl;

三、栈能解决的一些问题

1、铁轨问题

紫书p140例题6-2铁轨问题

2、矩阵链乘

紫书怕41例题6-3矩阵链乘
简单的表达式可以通过栈的模拟来实现操作。遇到’)‘入栈就不停取出运算直到遇见’('继续push入栈。

作者:Avalon Demerzel,喜欢我的博客就点个赞吧,更多紫书知识点请见作者专栏《紫书学习笔记》

【紫书第六章】链表(list)、栈和双向队列(deque)相关推荐

  1. 【紫书】第一章实验+问题

    紫书第1章实验 实验A1:表达式11111∗1111111111\ast1111111111∗11111的值是多少?改成6个1呢?9个1呢? 以下几个都用有符号整数%d\%d%d输出结果. 表达式11 ...

  2. 机器学习-西瓜书、南瓜书第六章

    支持向量机 支持向量机(Support Vector Machine),简称SVM,是一种经典的二分类模型,属于监督学习算法. 一.间隔与支持向量 支持向量机的目标是确定一个对样本的分类结果最鲁棒的线 ...

  3. 游戏设计的艺术:一本透镜的书——第六章 游戏以一个创意开始

    这是一本游戏设计方面的好书 转自天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第六章 游戏以一个创意开始 ...

  4. The Little Book of Semaphores 信号量小书 第六章 不那么经典的问题 6.3 狒狒穿越问题

    第六章 不那么经典的问题 6.3 狒狒穿越问题 这个问题改编自Tanenbaum的操作系统:设计和实现[12]. 南非克鲁格国家公园(Kruger National Park)的某处有一个深峡谷,还有 ...

  5. The Little Book of Semaphores 信号量小书 第六章 不那么经典的问题 6.4 莫德斯大厅问题

    第六章 不那么经典的问题 6.4 莫德斯大厅问题(The Modus Hall Problem) 这个问题是由Nathan Karst写的,他是2005年冬天住在Modus Hall的Olin学生之一 ...

  6. DFS、栈、双向队列:CF264A- Escape from Stones

    题目: Squirrel Liss liv Escape from Stonesed in a forest peacefully, but unexpected trouble happens. S ...

  7. 约瑟夫环c语言出现段错误,算法竞赛入门经典 紫书 第四章

    一点小问题 关于判断素数的几点 //该函数有严重缺点: //不能用于n==1和n较大的情况 //在n接近int的最大值时: //若i=46340时,i*i=2147395600//若i=46341时, ...

  8. 西瓜书第六章笔记及答案——支持向量机

    目录 第6章 支持向量机 6.1间隔与支持向量 6.2对偶问题 6.3核函数 6.4软间隔与正则化 6.5支持向量回归 6.6核方法 习题 6.1试证明样本空间中任意点 x x x到超平面 ( w , ...

  9. 整理 刘汝佳紫书第三章习题代码 未完待续

    还有一会儿要去剑道社训练...就整理整理好了... 习题3-1 得分 UVA1585 代码: #include <iostream> using namespace std; int ma ...

  10. 1826. 紫书第7章 暴力求解法 习题

    每一题单独写成了题解,方便大家查看. A . Firetruck B . Golygons C . The Domino Effect D . Cutting Chains E . Pipeline ...

最新文章

  1. 《中国人工智能学会通讯》——11.52 基于直推式学习的异质人脸图像 合成
  2. 单行文字压缩处理(要指定字体)
  3. 软件界面中英文对照_再也不用翻译软件了,弱电行业术语大全及中英文对照表来了~...
  4. 24.volatile关键字的作用、volatile原理、可见性、内存屏障、volatile性能、transient
  5. arcgis伪节点检查_arcgis建立拓扑分析(检验矢量图)
  6. Tomcat 是怎么处理js file access request的
  7. 【HDU - 5869】Different GCD Subarray Query(思维,数学,gcd,离线处理,查询区间不同数,树状数组 或 二分RMQ)
  8. 卡方分布的期望和方差_卡方独立性检验原理
  9. oracle拓展磁盘空间,Oracle磁盘空间使用统计
  10. SxsTrace工具用法
  11. 经典的同态滤波算法的优化及其应用参数配置
  12. 哪个计算机软件可以编辑动画文字,文字动画视频电脑版
  13. Go 语言 app.conf配置文件
  14. ​电脑上的回收站怎么隐藏 ,怎么隐藏桌面回收站图标
  15. 移植内核2.6.24.4到S3C2440
  16. “薪水”种种表达方法
  17. ApplicationAware
  18. 打印html,h5打印页面
  19. Linux系统配置网卡ip地址
  20. 常用的cmd命令与Linux命令

热门文章

  1. CentOS7下安装配置Tomcat环境
  2. 用Markdown格式写一份前端简历
  3. 公开课视频-《第01章 规划》-大企业云桌面部署实战-在线培训-视频(奉献)
  4. 关于编辑区无法调用chekbox的问题
  5. node-cookie- session
  6. __flash__removeCallback 未定义错误
  7. EXT.NET 使用总结(2) ---TreePanel(带右键菜单,节点自定义属性)
  8. C#保存CookieContainer到文件
  9. 建立可扩展的silverlight 应用框架 step-3
  10. Tomcat监控利器Probe