【数据结构】栈和队列OJ面试题

20. 有效的括号 - 力扣(LeetCode)

思路:由于C语言没有栈的接口,所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了(可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口),同时要注意要将typedef的STDataType从int类型改成char类型。在此之后,依次取出字符串中的字符判断,如果是左括号,则入栈。如果是右括号,则依次和栈顶字符去进行配对,然后出栈。再进行判断,配对则返回false,否则判断下一个字符。再while循环结束后还要再一次判空,排除栈中还有字符未进行判断的情况。

225. 用队列实现栈 - 力扣(LeetCode)

思路:由于C语言没有队列的接口,所以同样也需要我们自己造出一个“模子”来。再【数据结构】栈和队列-CSDN博客这篇博客中同样也有关于队列的接口,再这里我们直接copy一下队列的接口。

关于用队列实现栈,我们的思路是这样的,首先,创建出两个队列,一个队列用来在出栈时拷贝,一个队列用来在出栈时接受拷贝,所以这就要求一个队列必须是空的,而另一个队列的功能就是扮演栈的角色(因为队列出入数据是先进先出的,栈出入数据是先进后出的,所以在数据出栈的时候,只能用队列的拷贝来实现栈的数据出栈)。其他接口直接使用队列的接口就基本可以完成。

另外,要注意的是,在最后销毁栈的时候,需要先销毁两个队列再销毁栈,以免出现有野指针的情况。

 

232. 用栈实现队列 - 力扣(LeetCode)

思路:这道题同样需要用之前写的栈造一个“模子”。在解决这道题目时,需要我们创建两个栈去实现(st1用来存放数据,st2用来导数据)。当我们pop数据的时候,需要先将创建好的st1中的数据依次出栈到st2的栈中,然后将st2中的栈顶数据pop掉 ,最后将st2中的数据重新导回到st1中。在实现myQueuePeek(myQueuePeek接口要求我们返回队列开头的元素)接口的时候也是同样的方法,先将st1中的数据导到st2中,只不过接下来不需要pop栈顶元素,只需要记录下栈顶元素,然后再导回st1中,最后再返回记录下的元素就好了。其他的接口用之前实现栈的接口就可以基本解决了。

 

622. 设计循环队列 - 力扣(LeetCode)

思路:在这道题目中,我们采用顺序表的方法来完成。首先需要动态申请一个数组,然后初始化结构体。结构体中的head指向数组中的第一个节点,tail指向数组中最后一个节点的下一个节点,k的意思是数组中一共有k个数据。这里有接口需要我们判空和判满,但是如果就按这种思路写下去的话,我们会发现判空和判满的条件是一样的,都是head==tail。

那么我们应该如何去解决这个问题呢?这里我们有两种解决方案。第一种是在多开一个数组的空间,这样当队列满的时候的判空条件就变成了tail+1==head了,就避免了判空和判满条件一样的情况了。第二种方法是加一个size去判断队列中数据的个数。在此我们采用第一种方法来完成代码。

还需要注意的一个接口是取队尾的接口,这个接口需要取tail前一个结点,但是有一种特殊的情况就是tail是数组中第一个空间,这时候tail在-1的话就会变成-1,而不是指向第5块空间。这是我们可以进行一个判断,如果tail是第一块空间,那么则返回地5块空间的数据,否则返回第tail-1块的空间就可以了。或者我们可以取第((tail-1)+(k+1))%(k+1)个数据就是队列的队尾数据。

  • 72
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 45
    评论
OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集 OJ数据结构,算法等的一个杂集
算法与数据结构涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值