Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by typedef struct Queue
数据结构之通过“ 队列 ”实现的“ 栈 ”功能。
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 前言 本节内容是利用“ 队列 ”先进先出的特点 实现 “ 栈 ” 先进后出。 一、题目 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。 注意: 你只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。 示例: 输入: ["MyStack", "push", "push", "top", "pop", "empty"] [[], [1], [2], [], [], []]...
(超详细)数据结构--“队列”的深度解析-CSDN博客
目录 前言: 队列与栈都是线性表,它们的结构也非常类似,都是一头进一头出,那么它们有什么区别吗?答案是有的,虽然它们同为线性表,但是栈的出栈入栈方式为后进先出,而队列的出栈入栈方式为先进先出,具体我们在正文讲解。 1.队列的概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列:进行删除操作的一端称为 队头。 2.队列的实现 队列与栈的结构类似,所以它和栈一样,使用链表和顺序表都可以实现队列,但是由于队列遵循先进先出的顺序,如果使用顺序表进行头删实现出队列的话,整个队列的数据需要频繁向前移动,代码效率相对较低,而使用链表的头删实现出队列的话,只需要将头节点删除即可,所以综上所述,我们将使用链表来实现队列。 3.代码实现队列 为了方便管理,我们还是将队列分为三个文件实现,分别是Queue.h...
二叉树的实现(初阶数据结构)-CSDN博客
1.二叉树的概念及结构 一棵二叉树是结点的一个有限集合,该集合: 1.或者为空 2.由一个根结点加上两棵别称为左子树和右子树的二叉树组成 从上图可以看出: 1.二叉树不存在度大于2的结点 2.二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树 1.满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树,也就是说没如果一个二叉树的层数为K,且结点总数是2^k-1,则它就是满二叉树。 2.完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当每一个结点都与深度为K的满二叉树中编号从1至n的结点——对应时称之为完全二叉树,要注意的是满二叉树是一中特殊的完全二叉树。 1.若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1)个结点。 2.若规定根结点的层数为1,则深度为h的二叉树的最大结点数是2^h-1。 3.对任何一棵二叉树,如果度为0其叶子结点个数为a,度为2的分支个数为b,则有a=b+1。...
LeetCode/NowCoder-栈和队列OJ练习-CSDN博客
孜孜不倦:孜孜:勤勉,不懈怠。指工作或学习勤奋不知疲倦。💓💓💓 目录 说在前面 dear朋友们大家好!💖💖💖我们又见面了,有到了我们数据结构的刷题时间了。我们上次刚学完了栈和队列,现在正好练练手~ 👇👇👇 友友们!🎉🎉🎉点击这里进入力扣leetcode学习🎉🎉🎉 以下是leetcode题库界面: 👇👇👇 🎉🎉🎉点击这里进入牛客网NowCoder刷题学习🎉🎉🎉 以下是NowCoder题库界面: 题目链接:20.
【数据结构】详解队列-CSDN博客
现在我们来掌握一下队列!如果有对往期知识有不足地方,可翻阅之前文章哦! 个人主页:小八哥向前冲~-CSDN博客 所属专栏:数据结构【c语言版】_小八哥向前冲~的博客-CSDN博客 栈和队列的实现其实都是对你顺序表和链表的检验,只有一些新的概念罢了! 哈哈!不信就往下看吧!!! 目录 Queue.h文件 Queue.c文件 什么是队列? 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 。 入队列:进行插入操作的一端称为队尾。 出队列:进行删除操作的一端称为队头。 上图理解: 注意:遵循先进先出的原则!这个原则就是区分栈(后进先出)和队列(先进先出)方法! 我们来看看一个队列需要有的最基本要求:详情见--queue - C++ Reference 了解了队列的基本概念,我们来扩展一下! 扩展--循环队列 生活中队列很常用,而在实际的生活中,有时我们会用到循环队列。 循环队列它也有一些应用场景。如:在操作系统中的生产者消费者模型(这个我们后续提到!)...
由浅入深带你了解数据结构中的二叉树-CSDN博客
1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合。它的形状像一颗倒挂的树,因此我们把它叫做树。其特点如下所示: <1.>有一个特殊的节点,称为根节点,根节点没有前驱节点 <2.>除根节点外,其余节点被分为M(M>0)个互不相交的集合,其中每个集合又是一颗结构与树类似的子树。每颗子树的根节点有且只有一个前驱,可以有0个或多个后继,因此,树是递归定义的。 注意:树形结构中,子树之间不能有交集,否则就不是树形结构 1.2.树的相关概念 节点的度:一个节点含有的子树的个数称为该节点的度,如上图:A的度为3。 叶节点或终端节点:度为0的节点被称为叶节点,如上图:E、F、G、H、I、J为叶节点。 非终端节点或分支节点:度不为0的节点。 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,如上图:B就是E、F的父节点。 孩子节点或子节点:一个节点含有子树的根节点称为该节点的子节点,如上图:B、C、D就是A的子节点 兄弟节点:具有相同父节点的节点互称为兄弟节点,如上图H、I、J就是兄弟节点。...
栈与队列的故事-CSDN博客
目录 1.3源码 2.3源码 一、栈 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈,出数据也在栈顶。 栈的实现一般可以使用数组或者链表实现: 对于链表而言又有双向链表和单链表,如果用双向链表实现,栈顶既可以是尾,也可以是头。如果用单链表实现,栈顶只能是头,因为单链表尾插容易,尾删却比较麻烦;而头插头删都很容易。 相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。 1、实现支持动态增长的栈 typedef int STDataType; typedef struct stack { STDataType* arr; int top; //栈顶 int capacity; //容量 }ST; 2、初始化栈...
数据结构->手把手教入门栈与列队(基础)-CSDN博客
✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 1.什么是栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除 操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out) 的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 这种结构类似于弹夹:遵守后进先出的原则 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上 插入数据的代价比较小。 2.栈的实现 这里我们讲解数组(顺序表)实现 这里顺序表一样,a是数组,free是释放一块连续的空间。 这里注意的是创建后,记得top++; 这里我们讲一个点,我们只创建一个栈Stack s,如果要创建两个栈,最好使用结构体包装起来,比如说: 这样就可以直接创建两个顺序表了。 3.什么是列队 列队列队其实可以理解为排队 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先...
【海贼王的数据航海:利用数据结构成为数据海洋的霸主】栈和队列-CSDN博客
目录 1 -> 栈 1.2.1 -> Stack.h 1.2.2 -> Stack.c 1.2.3 -> Test.c 2.2.1 -> Queue.h 2.2.2 -> Queue.c 1 -> 栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 栈的实现一般可以使用数组或链表实现,相对而言数组的结构实现更优。因为数组在尾上插入数据的代价比较小。 1.2.1 -> Stack.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <assert.h> #include <stdbool.h> // 定长的静态栈的结构,实际中一般不实用 //typedef int STDataType; //#define N 10...
数据结构 - 栈和队列-CSDN博客
本篇博客将介绍栈和队列的定义以及实现。 1.栈的定义 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除数据,插入数据的一端叫做栈顶,另一端叫做栈底。栈中的数据遵守后进先出的原则 LIFO (Last In First Out)。 插入数据的操作称为压栈/进栈/入栈。 删除数据的操作称为出栈。 压栈和出栈的操作都在栈顶。 2.
数据结构------栈(Stack)和队列(Queue)-CSDN博客
也是好久没写博客了,那今天就回归一下,写一篇数据结构的博客吧。今天要写的是栈和队列,也是数据结构中比较基础的知识。那么下面开始今天要写的博客了。 目录 喜欢就点个赞吧。 栈(Stack) 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除 操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out) 的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 简单描述栈的特点:栈数据的增删都是在一头进行,即在栈顶 那栈又该如何创建与使用呢?他的原理又是怎样的,这里我们就用C语言实现一下。 我们这里就要想这个栈是要用数组来实现还是用链表来实现呢?其实我们可以从其功能开始思考,这两者哪个更好去实现栈的功能,而且效率较高,其实说到这里,很多人可能已经有了结果,其实要说简洁与效率数组更适合来做栈。那么我们下面就来完成一下这个代码完成一个栈。 这里先给头文件因为其中有typedef来命名的类型,以免各位佬看得迷惑。 头文件...
DS:八大排序之归并排序、计数排序-CSDN博客
创作不易,感谢三连支持!! 一、归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 还有一个关键点就是:归并一定要先拷贝到一个新数组里面,再拷贝到原数组!! 根据上面的思路,我们来实现代码: void _MergeSort(int* a, int begin, int end, int* temp) { if (begin == end) return;//设置递归返回条件 int mid = (begin + end) / 2; //开始分解 _MergeSort(a, begin, mid, temp);//左区间归并 _MergeSort(a, mid+1, end, temp);//右区间归并 //开始进行总归并 int begin1 = begin, end1 = mid;//设置指针指向左区间 int begin2 = mid +...
【数据结构】二叉树问题总结-CSDN博客
目录 1.二叉树前序遍历,中序遍历和后序的实现 我们回顾以下二叉树的遍历: 前序遍历(先序遍历):访问根节点的操作发生在遍历其左右子树之前 中序遍历:访问根节点的操作发生在遍历其左右子树之间 后序遍历:访问根节点的操作发生在遍历其左右子树之后 二叉树的遍历通过递归实现,下图为二叉树前序的递归遍历图解: 从根节点开始,先遍历根节点,再遍历左子树,左子树的遍历又分为先遍历根节点再遍历左子树,以根左子树右子树的顺序递归遍历,直至根节点为NULL 前序递归遍历的参考代码如下: #include<stdio.h> #include<stdlib.h> //快速构建一棵二叉树 typedef int DataType; typedef struct TreeNode { struct TreeNode* left; struct TreeNode* right; DataType data; }TreeNode; //创建节点 TreeNode* BuyNode(DataType x) { TreeNode* newnode =...
【C语言 数据结构】堆与二叉树(下)
接着上次的,这里主要介绍的是堆排序,二叉树的遍历,以及之前讲题时答应过的简单二叉树问题求解 给一组数据,升序(降序)排列 思路 思考:如果排列升序,我们应该建什么堆? 首先,如果排升序,数列最后一个数是 最大数,我们的思路是通过 向上调整 或者 向下调整,数组存放的第一个数不是最小值(小堆)就是最大值(大堆),此时我们将最后一个数与第一个数交换,使得最大值放在最后,此时再使用向上调整 或者 向下调整,得到第二大的数,重复上述动作,很明显,我们需要的第一个数是最大值,因此我们需要建大堆 反之,排降序,建立小堆 代码 #include<stdio.h> void downAdjust(int* pa, int parent, int n) { int child = parent * 2 + 1; while (child < n) { if (child + 1 < n && pa[child] > pa[child + 1]) { child++; } if (pa[parent] > pa[child]) { swap(&pa[parent], &pa[child]); }...
leetcode:用队列实现栈(后进先出)-阿里云开发者社区
题目描述 题目链接:225.
队列的实现-阿里云开发者社区
1.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出?FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 2.队列的实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数 组头上出数据,效率会比较低。 我们可以用单链表来实现: 2.1创建一个队列 先创建一个结构体封装数据之间的关系 再创建一个结构体封装队列的头和尾 2.2初始化 2.3销毁 2.4入队列 2.5出队列 2.6取队列头数据 2.7取队列尾数据 2.8判空 2.9返回队列有效元素个数 2.10访问 当队列不为空的时候,访问队头数据,访问一个pop一个 3.总代码?
【LeetCode刷题日志】225.用队列实现栈-阿里云开发者社区
🎈个人主页:库库的里昂 ?🎐C/C++领域新星创作者 ?🎉欢迎 👍点赞?评论?收藏 ?收录专栏:LeetCode 刷题日志 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 1.题目描述 OJ链接 【leetcode 题号:225.用队列实现栈】【难度:简单】 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。 注意: 你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。 你所使用的语言也许不支持队列。?你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列?, 只要是标准的队列操作即可。 示例: 输入:...
栈(stack)和队列(queue)-阿里云开发者社区
?一、栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 二、栈的实现 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。 三、实现栈(数组实现) bool StackEmpty(Stack* ps) { return ps->top == 0; //空返回1;非空返会0; } 四、队列的概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列:进行删除操作的一端称为 队头 五:队列的实现 队列的初始化:void QueueInit(Queue* pq); 队列的销毁:void QueueDestroy(Queue* pq);...
【数据结构】第七站:栈和队列力扣题-阿里云开发者社区
题目链接:力扣 对于这道题,设计循环队列,我们最容易想到的方法就是使用链表。不难想到,对于单链表只需要将头尾给链接起来,似乎就能变成循环队列了 我们假设k为4, 我们一开始让front和rear都指向第一个元素,当需要入队列的时候,rear指向下一个元素 ?当想要出队列的时候,让front往后走一步即可 ?我们继续入队列,当数据入满的时候,如下图所示,我们发现一个问题,队列满和队列空都始front和rear相等,无法辨别。 ?为了解决这个问题,我们有两种解决方案: 1.使用一个变量size来记住队列有几个元素 2.多开辟一个结点,这样当队列满的时候,rear->next==front这就是判断队列满的标志了,得以区分 这样了以后,其实还是有一点问题的,如果我们需要取出尾数据的话,十分难受,我们必须得去遍历链表。 当然我们可以多定义一个指针有进行处理,但是这样代码可读性变差了 由上述分析得知,循环队列并不适合使用链表来实现,反而适合数组。 想要使用数组来实现,那么我们得先分析基本的思路 如果使用数组来模拟的话,首先我们假设k为4,为了区分满与空,我们需要开辟5个空间...
【C语言数据结构(基础版)】第四站:栈和队列-阿里云开发者社区
一.栈的表示和实现 1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出LIFO(Last in First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶 出栈:栈的删除操作叫做出栈。出数据也在栈顶 ?2.栈的实现 从上面我们也可以看出来,栈的实现一般可以使用数组或者链表实现,相对而言,其实数组的结构实现更优一些,因为数组在尾上插入数据的代价比较小 ?二、栈的实现 1.栈的声明和定义 根据我们上面的分析,我们决定使用顺序表来实现栈。所以它的声明如下 typedef int STDateType; typedef struct Stack { STDateType* a; int top; int capacity; }Stack; 2.栈的初始化 它的声明如下 //栈的初始化 void StackInit(Stack* ps); 它的函数实现也很简单 //栈的初始化 void StackInit(Stack* ps) {...
【数据结构】第六站:栈和队列-阿里云开发者社区
一、栈 1.栈的概念和结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 2.栈的实现方案 对于这个栈,想必我们也不难想到他有两种实现的方案了,第一种方案是使用顺序表来实现,第二种方案是使用链表来实现 顺序表实现 如果采用顺序表来实现的话,由于只有在栈顶会出数据和入数据,所以栈顶就应该对应着数组的尾。 ?而这种方式,我们不难发现他是很优的,而且由于cpu的局部性原理,也是具有一定的优势的。因此我们发现栈是一种很适合使用顺序表实现的 链表来实现 如果采用链表来实现的话,我们可以选择使用单链表和带头双向循环链表。 如果我们使用单链表 我们这里又可以细分为栈顶在链表头和在链表尾 如下图所示是栈顶在链表尾部,这样的话我们显然可以得知他的效率是很低的 ?如果栈顶在链表头的话,这样就可以提升了效率,但是仍然没有顺序表更具有优势...
栈&队列OJ练习题(C语言版)-CSDN博客
目录 如果栈和队列忘了,不妨看看小生的这两篇复习一下数据结构与算法—栈 数据结构与算法—队列 一、括号匹配问题 20.
【Leetcode -225.用队列实现栈 -232.用栈实现队列】
开发者社区 云计算 文章 正文 2023-10-26 2 简介: 【Leetcode -225.用队列实现栈 -232.用栈实现队列】 Leetcode -225.用队列实现栈 题目:仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。 注意: 你只能使用队列的基本操作 —— 也就是 push to back、peek / pop from front、size 和 is empty 这些操作。 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。 示例: 输入: [“MyStack”, “push”, “push”, “top”, “pop”, “empty”] [[],...
【数据结构与算法】two X 树的遍历以及功能实现(下)
求二叉树的高度(BTreeHeight) 先比较一下以下的哪种代码更优: 方案一:? ? ? ? ?在递归调用BTreeHeight函数之后,并没有对返回值进行保存和比较,而是直接返回了当前节点的左子树和右子树的高度中较大的一个加1。这样的实现虽然能够得到正确的结果,但是效率较低。因为在计算左子树的高度和右子树的高度时,每次都会重复递归调用 BTreeHeight函数 为了更好地理解方案一的解释,这里写出一个不用三目运算符,但是等价于上述代码的代码 画图理解: 这里其实用到的是分治算法,通常分为三个步骤: 分解(Divide):将原问题划分为若干个规模较小的子问题。这一步通常在递归的过程中进行,直到问题足够简单,可以直接求解。 解决(Conquer):递归地解决子问题。对于每个子问题,如果它的规模足够小,可以直接求解;否则,继续递归地将子问题划分为更小的子问题。 合并(Combine):将子问题的解合并得到原问题的解。这一步通常在递归的回溯过程中进行。 代码实现:?
【数据结构】队列和栈-阿里云开发者社区
大家中秋节快乐,玩了好几天没有学习,今天分享的是栈以及队列的相关知识,以及栈和队列相关的面试题 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 1.2栈的实现 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。 栈的接口函数 // 初始化栈 voidStackInit(Stack*ps); // 入栈 voidStackPush(Stack*ps, STDataTypedata); // 出栈 voidStackPop(Stack*ps); // 获取栈顶元素 STDataTypeStackTop(Stack*ps); // 获取栈中有效元素个数 intStackSize(Stack*ps); //...
万字精讲--数据结构栈与队列必会OJ练习-阿里云开发者社区
在之前的博客中,我们学习了栈与队列的基本内容,并且实现了栈与队列。今天我们进行刷题训练,走进栈与队列的世界中去感受一番!!! 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 OJ链接?【leetcode 20.有效的括号】 这道题我们先做分析:满足的三大条件总结:类型匹配、顺序匹配、数量匹配。要满足这三个条件才可以返回true,反之则返回false。 最左边的括号要与最右边的括号进行匹配,这里我们就可以使用栈先进后出的特性来完成。当我们遇到一个左括号时,让其进栈进行储存。反之遇到右括号时,让栈中元素进行出栈进行匹配。 ?
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法【下】-阿里云开发者社区
开发者社区 大数据 文章 正文 2023-10-09 4 简介: 六、二叉树叶子节点个数 1.代码: 2.测试结果: 七、二叉树第k层节点个数 1.代码: 2.测试结果: 八、二叉树查找值为x的节点 1.代码: 2.测试结果: 九、判断二叉树是否是完全二叉树 1.代码: 2.测试结果: 十、补充:队列代码 Queue.h Queue.c 💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页?:阿然成长日记 👈点击可跳转 📆?个人专栏:?🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 文章目录 六、二叉树叶子节点个数 1.代码: 2.测试结果: 七、二叉树第k层节点个数 1.代码: 2.测试结果: 八、二叉树查找值为x的节点 1.代码: 2.测试结果: 九、判断二叉树是否是完全二叉树 1.代码: 2.测试结果: 十、补充:队列代码 Queue.h Queue.c 六、二叉树叶子节点个数 思路: 1.向下递归的条件是当前节点左或者右节点有一个为空,一个不为空。...
【数据结构】栈和队列-- OJ-CSDN博客
目录 一 用队列实现栈 225.
【C语言数据结构------栈和队列4000字详解】_-_Joker_-的博客-CSDN博客
欢迎阅读新一期的c语言数据结构模块————栈和队列 ✒️个人主页:-_Joker_- 🏷️专栏:C语言 📜代码仓库:c_code 🌹🌹欢迎大佬们的阅读和三连关注,顺着评论回访🌹🌹 文章目录 栈 一、栈的概念 1.什么是栈 2.栈的基本操作 二、栈的实现 1.定义栈的结构 2.栈的初始化 3.栈的判空 4.入栈 5.出栈 6.获取栈顶元素 7.栈的销毁 队列 一、队列的概念 1.什么是队列 2.队列的基本操作 二、队列的实现 1.定义队列的结构 2.队列初始化 3.队列判空 4.入队 5.出队 6.获取队首元素 7.队列的销毁 栈 1.什么是栈 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 栈顶(Top): 线性表允许进行插入删除的那一端。 栈底(Bottom): 固定的,不允许进行插入和删除的另一端。 空栈:...
链式二叉树的实现及遍历(C语言版)_HenryLin1234的博客-CSDN博客
目录 1 基本概念 ⭕树是一种非线性的数据结构 ⭕树的根结点没有前驱节点,根节点可以指向任意多个子节点(N叉树) ⭕树形结构中,子树之间不能有交集,否则就是图 ⭕度:一个节点含有的子树的个数。例如二叉树的根节点的度为2,上图A节点的度为3 ⭕树的度:一棵树中最大的节点的度。如二叉树的度就是其根节点的度,上图树的度为3 ⭕树的高度或深度:树中节点的最大层次。如上图树的高度为3 ⭕叶子节点或终端节点:度为0的节点。如上图的E F G均为叶子节点 1.2.1 "左孩子右兄弟"表示法 1.2.2 "左右子树"表示法 ⭕问:为什么不叫“左右孩子”表示法呢? 答:结构体内的left指针和right指针的确指向根的左右孩子节点,但是以整体的思想,左右孩子节点又是左子树和右子树的根节点,以“左右子树”命名有利于帮助我们理解二叉树的一系列递归问题。 ⭕在现阶段,我们运用“左右子树”表示法更多一些。 1.2.3 手动构建一棵树 typedef char BTDataType; typedef struct BinaryTreeNode { struct BinaryTreeNode* left;...
[C语言]栈与队列--喵喵队,冲冲冲_本喵是FW的博客-CSDN博客
宝子,你不点个赞吗?不评个论吗?不收个藏吗? 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要。 目录 前言 栈 队列 总结 前言 实践,实践,实践,多练几遍力扣,牛客的题。落实到脚下。 栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 Push:进,Pop:出 栈的实现 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。 #include "common.h" typedef int STDataType; typedef struct Satck { STDataType* _a; int _top; int _capacity; }Stack; void StackInit(Stack* ps, int n); void...
手撕二叉树_小宁n的博客-CSDN博客
前序遍历构建二叉树 二叉树的销毁 二叉树的结点个数 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点 二叉树前序遍历 二叉树中序遍历 二叉树后序遍历 二叉树的层序遍历 判断二叉树是否是完全二叉树 完整代码 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <assert.h> #include <stdlib.h> typedef int BTDataType; typedef struct BinaryTreeNode { struct BinaryTreeNode* left; struct BinaryTreeNode* right; BTDataType val; }BTNode; #include "Queue.h" // 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 BTNode* BinaryTreeCreate(BTDataType* a, int* pi) { if (a[*pi] == -1) { ++(*pi); return NULL; }...
栈和队列OJ_#欲速则不达#的博客-CSDN博客
题目介绍: 思路: 如果 c 是左括号,则入栈 push; 否则通过哈希表判断括号对应关系,若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应,则提前返回 false。 栈 stack 为空: 此时 stack.pop() 操作会报错;因此,我们采用一个取巧方法,给 stack 赋初值 ?,并在哈希表 dic 中建立 key: ‘?’,value:’?’ 的对应关系予以配合。此时当 stack 为空且 c 为右括号时,可以正常提前返回 false 字符串 s 以左括号结尾: 此情况下可以正常遍历完整个 s,但 stack 中遗留未出栈的左括号;因此,最后需返回 len(stack) == 1,以判断是否是有效的括号组合 typedef int STDataType; //动态存储结构 typedef struct Stack { STDataType *a; int top; int capacity; //容量 }ST; void STInit(ST* ps); //初始化栈 void STDestory(ST* ps); //销毁栈 bool...
万字精讲--数据结构栈与队列必会OJ练习_W…Y的博客-CSDN博客
W...Y的主页 💕 代码库分享 😊 在之前的博客中,我们学习了栈与队列的基本内容,并且实现了栈与队列。今天我们进行刷题训练,走进栈与队列的世界中去感受一番!!! 目录 括号匹配问题 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 OJ链接 【leetcode 20.有效的括号】 这道题我们先做分析:满足的三大条件总结:类型匹配、顺序匹配、数量匹配。要满足这三个条件才可以返回true,反之则返回false。 最左边的括号要与最右边的括号进行匹配,这里我们就可以使用栈先进后出的特性来完成。当我们遇到一个左括号时,让其进栈进行储存。反之遇到右括号时,让栈中元素进行出栈进行匹配。 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> typedef char STDataType; typedef...
深入浅出带你玩转栈与队列--【数据结构】_W…Y的博客-CSDN博客
W...Y的主页 😊 代码仓库分享 💕 目录 1.栈 1.3.2进栈 1.3.3出栈 2.队列 2.3.4出队 在前几期的学习中,我们学习了顺序表与链表,今天我们将学习一种新的数据结构——栈与队列。而栈与队列实际上就是链表的一种变形产物,但肯定会有许多结构上的不同。 现在就让我们进入栈和队列,看看它们的特点!!! 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 1.2栈的结构特征图 文字力量有时太过渺小,我们通过图解更清楚的了解栈的特点。 1.3栈的实现 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。 void STInit(ST* ps) { assert(ps); ps->a = NULL; ps->capacity = 0; ps->top...
【数据结构】栈和队列_是基德吖的博客-CSDN博客
大家好!今天我们来学习数据结构中的栈和队列。 目录 1. 栈 1.4.1 Stack.h 1.4.2 Stack.c 1.4.3 Test.c 2. 队列 2.4.1 Queue.h 2.4.2 Queue.c 2.4.3 Test.c 3.
【LeetCode】【数据结构】栈与队列必刷OJ题_樊梓慕的博客-CSDN博客
👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 本篇文章博主会给大家推荐几道栈与队列的必刷OJ题,并提供思路分析及原码(包含栈与队列的实现)。 欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。 ========================================================================= GITEE相关代码:🌟fanfei_c的仓库🌟 ========================================================================= 原题链接:🍏有效的括号🍏 题目:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 根据栈“先入后出”的特性,我们可以利用栈的数据结构进行检验。...
【数据结构】栈和队列_小王又困了的博客-CSDN博客
🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 🗒️前言: 在前几期的学习中,我们认识了顺序表和链表这两种线性表,而在本期学习中,我们将会认识别的线性表。跟随我们的脚本,看看栈和队列有怎样的特点。 1.1栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 1.2栈的结构 📒2.1栈的初始化 我们将结构体的所有元素都初始化为0。这里与我们在顺序表中的初始化不同,在顺序表中我们在初始化时就开辟了空间,下面我们会介绍另一种方式。 void STInit(ST* ps) { assert(ps); ps->arr = NULL; ps->capacity = ps->top = 0; } 📒2.2进栈...
数据结构刷题训练:队列实现栈_清水加冰的博客-CSDN博客
我们已经学习了栈和队列,也都实现了它们各自的底层接口,那么接下我们就要开始栈和队列的专项刷题训练。 题目描述: 题目链接: 队列实现栈https://leetcode.cn/problems/implement-stack-using-queues/ 队列的结构是先进先出,题目的要求是,让我们利用队列的底层接口来实现栈,不可以改变队列的底层逻辑,所以如果你的思路是逆置队列这个链表,那这个思路就被pass掉了。 那我们要如何利用队列尾进头出的特性来实现栈的尾进尾出呢?题目中给了我们两个队列,我们要使用这两个队列实现栈。 入栈操作好说,问题在于出栈问题,思路是这样的:我们有两个队列,一个队列用于存储数据,另外一个队列(空队列)用于拷贝数据,将原队列的前n-1个数据拷贝到空队列中,然后再将原队列剩余的最后一个元素出队列,这样就模拟实现了栈的尾出。 根据上述的思路分析,队列实现栈,入栈不需要什么特殊操作例如我们入栈:1、2、3、4、5,出栈呢就是:5、4、3、2、1。...
【LeetCode训练营】用栈来实现队列+用队列来实现栈 详解
目录 源码 源码 后记 232.
栈与队列的简单实现_mb61c27cc17594a的技术博客_51CTO博客
三六九头 2023-05-18 13:35:35 ©著作权 文章标签 链表 队列 栈 动态数组 文章分类 代码人生 指尖人生 ©著作权归作者所有:来自51CTO博客作者三六九头的原创作品,请联系作者获取转载授权,否则将追究法律责任 一、数组实现栈 1.什么是栈 栈是一种存储数据的结构。 栈就好比是一个仓库,只能从仓库的门口像仓房放东西和拿东西,先放的东西在仓库深处,直到堆满仓库,当我们想要取出某一件东西时,只能从最外面的东西开始把东西一件件拿出来。 也就是说栈只能从一端进行插入和删除,而插入和删除数据的内一端被称为栈顶,另一端叫做栈底。也就是后进先出。 2.如何定义栈 栈的定义: typedef int DataType; typedef struct Stack { DataType* a; int top; int capacity; }ST; 我们用动态数组思想来实现栈。...
队列_wx6402bd40342fe的技术博客_51CTO博客
wx6402bd40342fe 2023-04-30 22:04:58 ©著作权 文章标签 链表 结点 #include 文章分类 C/C++ 后端开发 yyds干货盘点 ©著作权归作者所有:来自51CTO博客作者wx6402bd40342fe的原创作品,请联系作者获取转载授权,否则将追究法律责任 1.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列遵循先进先出FIFO(First In First Out) ,与栈的后进先出相反。 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 2.队列的实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低,对于队列的实现,我们使用的是链表。 标准库的包含 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<assert.h> 队列结构体的设计...
【leetcode】学了栈和队列却觉得无用武之地?试试这几道题目吧!_花想云的博客-CSDN博客
目录 这些题目所用语言为C语言,由于C语言未提供栈和队列的数据结构,所以需要我们手动实现栈和队列。此外熟练掌握栈和队列的性质对解题尤为重要。如果忘记了栈和队列的使用方法可在此直接跳转到栈和队列详解篇。 <栈>的概念&结构&实现【C语言版】http://t.csdn.cn/lqe2X<队列>的概念&结构&实现【C语言版】http://t.csdn.cn/iXiZI OJ链接:有效的括号(点此跳转) 解题思路:遍历字符串,如果碰到 ' ( ' 或 ' [ ' 或 ' { ' 就入栈;如果碰到字符是 ' ) ' ,栈顶的元素又是 ' ( ',就将栈顶的元素出栈。其他两种情况与之类似。 解题实战: typedef char STDataType; typedef struct Stack { STDataType* a; //动态开辟数组 int capacity; //记录栈的容量大小 int top; //记录栈顶的位置 }Stack; //栈的初始化 void StackInit(Stack* ps); //释放动态开辟的内存 void StackDestroy(Stack*...
(图解)循环队列的三种判断队空、队满操作(附带源码和插入删除操作等一些基本操作)_循环队列判断队空和队满_黑夜里的小夜莺的博客-CSDN博客
目录 在介绍循环队列三种判断队空、队满操作之前,先解释下为啥会用循环队列。 队列:一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一段称为队尾,允许删除的一段称为队头。 咱们看一下普通的顺序存储队列: 普通的顺序储存队列的存储结构为: #define MAXSIZE 5 typedef int DataType; typedef struct Queue { DataType data[MAXSIZE]; // 存储队列的数据空间 int front; // 队头指针 int rear; // 队尾指针 }SeqQueue; 如图所示: front、rear分别指向队头,也就是数组索引为0的地方,此时队列为空(即rear == front), 现在将0、1、2、3、4依次入队(队尾指针rear一直向后移,队头指针front不动)。 如图所示: 0、1、2、3、4入队后,rear指向数组的后面,此时队满(即rear == MAXSIZE),然后再将0、1、2、3、4出队,出队后变为 队尾指针和队头指针都指向数组后面(即 rear ==...
一文教你数据结构体栈和队列的实现_️小马️的博客-CSDN博客
目录 1.3.1 .c 1.3.2 .h 1.3.3 test 2.3.1 .c 2.3.2 .h 2.3.3 test 1.1栈的概念及结构: 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 ~~~~记住一个原则,先进的后出,后进的先出。~~~~ 1.2栈的实现: 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。我们保证首先插入的后面出来就行。 1.2.1栈的定义: typedef int STDataType; //重定义int typedef struct Stack{ STDataType* a; STDataType top; //栈顶 STDataType capicity; }ST; 1.2.2栈的初始化: void StackInit(ST*ps) { assert(ps); ps->a=NULL;...
数据结构--栈与队列_栈和队列_勿绕空山的博客-CSDN博客
目录 2.链栈 二.队列 栈和队列是两种重要的线性结构。从数据结构的角度来看,栈与队列均属于线性表,其特殊性在于栈与队列的基本操作为线性表基本操作的子集,栈与队列为操作受限的线性表,故,栈与队列可称为限定性的数据结构, 1.栈的定义 栈,是限定仅在表尾进行插入与删除操作的线性表。对于栈来说,表尾端具有特殊的含义,称为栈顶,相应地将表头段成为栈底。不含元素的空表称为空栈。 栈的修改是按照后进先出的原则进行的,因此将栈成为后进先出的线性表。 栈的示意图: 模拟实现出栈与入栈操作:(以顺序栈为例) 2.栈的分类与基本操作 栈有两种存储表示方式:顺序存储方式与链式存储方式 1.
【数据结构】二叉树的构建(C语言实现)_建立二叉树的代码c语言_心辰如月1的博客-CSDN博客
1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点,称为根结点,根节点没有前驱结点 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1**、T2、……、**Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继 因此,树是递归定义的 注意:树形结构中,子树之间不能有交集,否则就不是树形结构 1.2树的相关概念 节点的度:个节点含有的子树的个数称为该节点的度; 如上图:A的为6 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点 非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G…等节点为分支节点 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with typedef struct
Contact typedef struct, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack