iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言基于考研的栈和队列
  • 806
分享到

C语言基于考研的栈和队列

2024-04-02 19:04:59 806人浏览 独家记忆
摘要

目录栈栈的基本操作三角矩阵总结栈 栈的基本操作 InitStack(&S):初始化 StackEmpty(S):判空,空则true,非空则fal


栈的基本操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

InitStack(&S):初始化

StackEmpty(S):判空,空则true,非空则false

Push(&S,x):入栈

Pop(&S,&x):出栈,并用x返回元素内容

GetTop(S,&x):读栈顶元素

DestroyStack(&S):销毁并释放空间

栈是一种受限的线性表,只允许在一端操作

栈若只能在栈顶操作,则只可能上溢

采用非递归方式重写递归时,不一定要用栈,比如菲波那切数列只要用循环即可

共享栈:

从两头往中间填充,有效的利用空间。

出栈序列的个数:1𝑛+1𝐶2𝑛𝑛

队列

队列也是受限的线性表,只允许在一端插入,另一端删除

FIFO(First in first out)

常见操作:

InitQueue(&Q):初始化,构造一个空队列Q

QueueEmpty(Q):判空

EnQueue(&Q,x):入队

DeQueue(&Q,&x):出队并返回出队的元素至x

GetHead(Q,&x):获取对头元素

队列的大题真题考的是,画初始状态,判空判满的条件,入队基本过程

So先看类似的概念,想法,思路,后期再看具体的代码实现,毕竟没考过具体代码

顺序存储定义:

#define Maxsize 50

typedef struct{
Elemtype data[Maxsize];

int front,rear;

}SqQueue;

循环队列:

初始化:Q.front=Q.rear=0

队首指针+1\入队:Q.front=(Q.front+1)%Maxsize

队尾指针+1\出队:Q.rear=(Q.rear+1)%Maxsize

队列长度:(Q.rear+Maxsize-Q.front)%Maxsize

因为队满和队空都是Q.front=Q.rear,所以无法判断到底是队空还是队满

有三个解决办法

1)常用方法:牺牲一个单元来区分队空和队满,入队是少用一个单元

队满条件:(Q.rear+1)%MaxsizeQ.front

队空条件:Q.frontQ.rear

队列中元素个数:(Q.rear-Q.front+Maxsize)%Maxsize

2)类型中增设一个数据成员表示元素个数,这样队空:Q.size0,队满:Q.sizeMaxsize

3)增设tag,入队时令tag=1,出队时令tag=0,这样能表示当Q.frontQ.rear时,如果tag1,则队满,tag==0则队空

链式存储:

typedef struct Linknode{ //定义节点

Elemtype data;

struct LinkNode *next;

}LinkNode;

typedef struct{ //定义队列的首尾节点

Node *front,*rear;

}LinkQueue;

栈和队列的应用

括号匹配

表达式求值

后缀表达式:数据进栈,操作符则弹出2个数据进行操作再将结果进栈

同一个问题,递归算法和非递归算法一般来说,非递归效率比较低,因为有很多重复计算

图的广度优先算法要借助辅助队列

将中缀表达式转换为前缀表达式

转换步骤如下:

初始化两个栈:运算符栈s1,储存中间结果的栈s2

从右至左扫描中缀表达式

遇到操作数时,将其压入s2

遇到运算符时,比较其与s1栈顶运算符的优先级

如果s1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈

否则,若优先级比栈顶运算符的较高或相等,也将运算符压入s1

否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4-1)与s1中新的栈顶运算符相比较

遇到括号时

如果是右括号“)”,则直接压入s1

如果是左括号“(”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到右括号为止,此时将这一对括号丢弃

重复步骤2至5,直到表达式的最左边

将s1中剩余的运算符依次弹出并压入s2

依次弹出s2中的元素并输出,结果即为中缀表达式对应的前缀表达式

将中缀表达式转换为后缀表达式

与转换为前缀表达式相似,步骤如下:

初始化两个栈:运算符栈s1和储存中间结果的栈s2;

从左至右扫描中缀表达式;

遇到操作数时,将其压s2;

遇到运算符时,比较其与s1栈顶运算符的优先级:

如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;

否则,若优先级比栈顶运算符的高,也将运算符压入s1(注意转换为前缀表达式时是优先级较高或相同,而这里则不包括相同的情况);

否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4-1)与s1中新的栈顶运算符相比较;

遇到括号时:

如果是左括号“(”,则直接压入s1;

如果是右括号“)”,则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃;

重复步骤2至5,直到表达式的最右边;

将s1中剩余的运算符依次弹出并压入s2;

依次弹出s2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式(转换为前缀表达式时不用逆序)

特殊矩阵的压缩存储

对称矩阵

三角矩阵

三对角矩阵:又称带状矩阵

稀疏矩阵:三元组既可以用数组存储,也可以用十字链表

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言基于考研的栈和队列

本文链接: https://www.lsjlt.com/news/133737.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言基于考研的栈和队列
    目录栈栈的基本操作三角矩阵总结栈 栈的基本操作 InitStack(&S):初始化 StackEmpty(S):判空,空则true,非空则fal...
    99+
    2024-04-02
  • C语言栈和队列如何实现
    这篇文章主要讲解了“C语言栈和队列如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言栈和队列如何实现”吧!一、栈与队列以及双端队列的概念1.1 栈的概念及结构栈:一种特殊的线性表,...
    99+
    2023-06-30
  • C语言怎么实现栈和队列
    本文小编为大家详细介绍“C语言怎么实现栈和队列”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么实现栈和队列”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是栈栈:一种特殊的线性表,其只允许在固定的一端...
    99+
    2023-06-30
  • C语言编程数据结构的栈和队列
    目录栈数组实现标题全部代码Stack_array.cStack_array.h初始化数组栈满栈后扩容是否为空栈压栈和退栈链表实现stack_chain.hstack_chain.c整...
    99+
    2024-04-02
  • C语言栈与队列如何定义
    今天小编给大家分享一下C语言栈与队列如何定义的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。栈栈的定义栈是一种线性表,但限定这...
    99+
    2023-06-30
  • C语言近万字为你讲透栈和队列
    目录一、栈与队列以及双端队列的概念1.1 栈的概念及结构1.2 队列的概念及结构1.3 双端队列的概念及结构二、栈的实现和模拟栈2.1 实现一个支持动态增长的栈2.2 数组模拟静态栈...
    99+
    2024-04-02
  • C语言中用栈+队列实现队列中的元素逆置
    下面举例代码: 提到的Q是一个队列,S是一个空栈,实现将队列中的元素逆置的算法 #include<stdio.h> #define MaxSize 10 typedef ...
    99+
    2024-04-02
  • C语言栈与队列面试题详解
    目录1、括号匹配问题2、用队列实现栈3、用栈实现队列4、设计循环队列1、括号匹配问题 链接直达: 有效的括号 题目: 思路: 做题前,得先明确解题方案是啥,此题用栈的思想去解决是较...
    99+
    2024-04-02
  • C语言分别实现栈和队列详解流程
    目录什么是栈栈的结构图示栈的实现创建栈的结构体初始化栈入栈出栈获取栈顶元素获取栈中有效元素个数检测栈是否为空栈的销毁什么是队列?队列的实现创建队列结构体初始化队列队尾入队列队头出队列...
    99+
    2024-04-02
  • C语言循环队列与用队列实现栈问题解析
    目录循环队列题目描述题目链接思路分析代码实现用队列实现栈题目描述题目链接思路分析代码实现循环队列 循环队列: 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并...
    99+
    2024-04-02
  • C语言数据结构进阶之栈和队列的实现
    目录栈的实现:一、栈的概念和性质二、栈的实现思路三、栈的相关变量内存布局图四、栈的初始化和销毁五、栈的接口实现:1.入栈2.出栈3.获取栈顶的数据4.获取栈的元素个数5.判断栈是否为...
    99+
    2024-04-02
  • C语言栈与队列怎么相互实现
    本篇内容介绍了“C语言栈与队列怎么相互实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、本章重点用两个队列实现栈用两个栈实现队列解题思路...
    99+
    2023-06-29
  • Go语言有没有队列和栈结构
    这篇文章主要介绍“Go语言有没有队列和栈结构”,在日常操作中,相信很多人在Go语言有没有队列和栈结构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言有没有队列和栈结构”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-04
  • C语言栈与队列相互实现详解
    目录一、本章重点二、队列实现栈三、栈实现队列四、解题思路总结一、本章重点 用两个队列实现栈用两个栈实现队列解题思路总结 二、队列实现栈  我们有两个队列:  ...
    99+
    2024-04-02
  • c语言数据结构之栈和队列详解(Stack&Queue)
    目录简介栈一、栈的基本概念1、栈的定义2、栈的常见基本操作二、栈的顺序存储结构1、栈的顺序存储2、顺序栈的基本算法3、共享栈(两栈共享空间)三、栈的链式存储结构1、链栈2、链栈的基本...
    99+
    2024-04-02
  • C语言示例代码讲解栈与队列
    目录栈栈的定义顺序栈顺序栈的定义顺序栈的初始化顺序栈的入栈顺序栈的出栈取顺序栈的栈顶元素链栈队列队列的定义队列的顺序表达与实现队列顺序存储结构假溢出循环队列循环队列的初始化循环队列的...
    99+
    2024-04-02
  • C语言 浅谈栈与队列的定义与操作
    目录栈的定义栈的实现前置初始化栈栈的销毁栈的插入出栈的操作取栈顶元素栈的大小队列的定义队列的基本操作队列的初始化队列的销毁队列的插入队列的删除队列的判空取出队头元素取出队尾元素队列的...
    99+
    2024-04-02
  • C语言栈与队列面试题实例分析
    本文小编为大家详细介绍“C语言栈与队列面试题实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言栈与队列面试题实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、括号匹配问题链接直达:有效的括号题...
    99+
    2023-06-29
  • Go语言实现栈与队列基本操作学家
    目录一、前言二、实现栈与队列基本操作2.1 栈基本操作2.2 队列基本操作三、用栈实现队列3.1 理论3.2 算法题3.3 思路3.4 代码部分四、用队列实现栈4.1 理论4.2 算...
    99+
    2022-11-16
    Go语言栈 队列操作 Go语言 栈 Go语言 队列
  • C语言用栈模拟实现队列问题详解
    目录题目描述题目链接思路分析代码实现题目描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)。 你只能使用标准的栈操作...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作