栈与队列课堂笔记

本文详细解释了栈和队列的基本概念,包括它们的结构特点(如栈的后进先出原则和队列的先进先出),以及不同实现方式(如数组栈和链式栈)。还讨论了如何避免内存泄漏和栈溢出问题,以及相关的编程技巧和OJ题目示例。

的概念及结构

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端

称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。(后进入的元素最先出栈)结构弹夹

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据也在栈顶。

如何实现栈?

1数组栈:数组的开头是栈底,因为数组方便尾删(最佳实现),且cpu的高速缓存命中率高,

2链式栈:双向链表,栈顶可以是尾,也可以是头。头插头删,尾插尾删,效果相同。

                  单链表:栈顶只能是头,因为头插头删更方便。(单链表更好)

两种top的选择

1空时top=-1,top指向栈顶的上一个元素。Top=0时,一个元素。,top指向栈顶

2空时top=0,top指向栈顶元素,top=1时,top指向栈顶元素的下一个位置。

因此,在判断容量相等时,后者top==capacity 而前者是top+1==capacity。

怎么插入取决你怎么初始化。

栈的后进先出是相对的,是相对于在栈元素而言的,可以进的时候同时出,入栈顺序和出栈顺序是一对多的关系。

栈OJ题

1有效的括号

1数量匹配 2顺序匹配

*s取的是字符串的ASCLL码

同一域里不能有同名变量,

内存泄漏不会报错。

栈溢出:指的是操作系统的问题,比如递归程序,返回条件有问题

数据结构:栈   操作系统:栈(内存区域) 二者不一样

队列

2.1队列的概念及结构

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出

FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头

  

队列的实现 队尾入队头出

1数组  挪动覆盖 算法复杂度高

2单向链表

3双向链表 双向比但单向多了个指针,因此选单链表

头删需考虑空结点和但结点的情况,单节点会出现野指针。

有typedef是类型,无是类型,对于结构体右下角的名称而言。

函数内部的局部变量的地址不能返回,因为出了函数作用域就销毁了。返回的就是个野指针。

OJ题目

用队列实现栈

一个队列存储数据,另一个队列来出数据导数据。

用栈实现队列。


 

设计循环队列

头=尾 为空

Front指向对头,back指向对尾的下一个位置。back类似于之前栈里面的top

怎么判断满?

解决方案:

1 增加一个size, front=back的前提下,size=0为空,size!=0为满。

2多开一个位 k数据个数,空间开了k+1个,解决上面无法区分空和满的问题。

 (back+1)%(k+1)=front;

选数组要把取模运算玩好

千万不要写front指向头,back指向尾的下一个(如果不多开一个位置)。

单向循环链表来实现的缺点

1唯独不好取队尾数据

解决方案

1增加一个backprev指针

2改成双向链表

如果front=back 怎么判断空结点还是单结点。

OJ题看不出错误的解决方法

1画图之后走读代码,看有没有逻辑错误。

2放进VS调试,有些语法错误力扣是不报错的!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值