首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用队列实现栈(C语言版本)

    个人主页: :✨✨✨初阶牛✨✨✨ 强烈推荐优质专栏: C++的世界(持续更新中) 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 前言 在做这个题目之前,应当熟悉栈和队列这两种数据结构....栈和队列都是常见的数据结构,它们是基于数组或链表实现的线性数据结构。...栈的基本操作包括入栈(push)、出栈(pop)、查看栈顶元素(top)和判断栈是否为空(empty)。 应用场景:实现程序调用的函数堆栈、表达式求值、括号匹配检验等。...一、题目介绍 题目来源于–力扣 题目链接:传送门 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。...实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。

    49630

    C语言-用栈实现表达式求值(顺序栈)

    用gets(str);或者scanf进行字符串读入表达式后,存储方式如下: 多位数的存储方式: 我们可以通过str[i]进行逐位的访问,通过i++;实现逐位的偏移,那么就可以写成str...在这里,处理多位数时,提出一种“归并”的思想,首先设一个int X1;用X1=str[i++];读取每一位数字,再设一个int X2=0;通过X2=10*X2+X1;实现将已读取操作数归并到X2。...此算法用于计算整型,若要计算浮点数,把相应的类型更换成double即可实现。 算法运算逻辑是先以字符型读入字符数组中,再将字符型转换为整型存入数字栈中。...\n"); exit(0); } } } int In(char c) //判断是否为运算符,是运算符返回1,若不是返回0 { switch(c)...evaluateExpression(exp); printf("\n"); printf("%s%d\n",exp,result); return 0; } 执行结果: ---- 参考: 数据结构(C语言第二版

    2.3K10

    栈(c语言实现)

    一,栈的概念及结构 1,栈:一种特殊的线性表,其只允许在一端进行数据的插入和删除,这一端称为栈顶,还有一端就称为栈底。栈中的数据元素遵循后进先出LIFO(Last In First Out)的原则。...压栈:栈的插入操作,也叫做进栈,入栈,所插入的数据在栈顶。 出栈:栈的删除操作,所删除的数据在栈顶。 2,栈的结构 二,栈的实现  这里通过数组的方式实现。...capacity;  //栈的大小 }SL; 接下来要实现一些栈的功能 ,有栈的初始化,栈的销毁,入栈,出栈,取栈顶数据,获取栈的元素个数,判断栈是否为空。...int size(SL* s);  3,接下来是函数的实现 3.1,初始化栈 //初始化栈 void stackInit(SL* s) { assert(s); s->a = NULL;...4 : s->capacity * 2;//用三目操作符计算扩容的大小 //对a进行扩容 SLDataType* st = (SLDataType*)realloc(s->a, newcapacity

    20910

    c语言实现栈(顺序栈,链栈)

    个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏: C语言进阶 个人信条: 知行合一 本篇简介:>:讲解用c语言实现:“数据结构之"栈”,分别从"顺序栈"和"链栈"的接口讲解....由于是顺序表实现栈,所以在进行插入操作之前要先进行"判满"操作,如果栈满了,要进行扩容. top是指向栈顶下标,需要将其往后移动一位,使其指向待插入位置....SLStackNode* next; }SLStackNode; 其实我们不难发现,"链栈"的类型与单链表很相似,通过对"栈"的基本知识了解,"栈"只在一端进行"插入"和"删除"操作,为了用单链表实现这一要求...(ST* ps);//返回栈顶元素 void STDestory(ST* ps);//栈的销毁 接口实现区( stack.c) #include "stack.h" //初始化栈 void InitST...void STDestory(SLStackNode* ps);//栈的销毁 接口实现区(SLStack.c) #include "SLStack.h" //SLStackNode* InitStack

    69020

    C语言实现顺序栈

    文章目录 顺序栈的常规操作 定义顺序栈结构体 初始化顺序栈 顺序栈判满 顺序栈判空 计算顺序栈的长度 顺序栈入栈(Push) 顺序栈出栈(Pop) 顺序栈各操作测试 源代码 ?...入栈(Push),先把元素放入栈中,后让 栈顶指针top 后移 ++ s -> datas[s -> top] = data; s -> top++; 出栈(Pop),先让 栈顶指针(top) 前移...入栈(Push),,先把 栈顶指针top 后移 ++ ,后让元素放入栈中 s -> top++; s -> datas[s -> top] = data; 出栈(Pop),先取出栈顶元素,后让 栈顶指针...(s == NULL){ return FALSE; } return s -> top; } 顺序栈入栈(Push) /* * 入栈 压栈 * s 顺序栈 * data 入栈数据 *...源代码 源代码已上传到 GitHub Data-Structure-of-C,欢迎大家下载 C语言实现数据结构

    5.7K20

    C语言编程实战:每日一题:用队列实现栈

    欢迎来到say-fall的文章 这里是say-fall分享,感兴趣欢迎三连与评论区留言 专栏: 《C语言从零开始到精通》 《C语言编程实战》 《数据结构与算法》 《小游戏与项目》...题目:用队列实现栈 LeetCode:用队列实现栈 一、题目核心要求 实现一个栈的类 MyStack,要求仅使用两个队列来模拟栈的所有操作,且满足栈“后进先出(LIFO)”的核心特性。...要想用队列模拟栈,关键是通过两个队列的“数据转移” 实现栈的出栈逻辑。...3 个元素(1、2、3)依次出队并插入到 q2 中,此时 q1 仅剩 4,直接出队即可实现“栈顶出栈”;后续 q2 变为主队列,q1 变为辅助队列: 注意:栈的总元素个数 size 是 q1.size...”暴露出来,实现栈顶的弹出; 所有操作需严格维护队列的 size,栈的总 size 需实时更新为两个队列的 size 之和,保证判空、计数逻辑准确。

    10210

    C语言编程实战:每日一题:用栈实现队列

    欢迎来到say-fall的文章 say-fall:个人主页 专栏:《手把手教你学会C++》 | 《C语言从零开始到精通》 | 《数据结构与算法》 | 《小游戏与项目》...题目:用栈实现队列 LeetCode:用栈实现队列 1. 思路解析(初): 最初我采用了一种相对复杂的实现方式。...核心思路是:利用栈结构实现队列功能时,将新元素存入主栈后,通过转移操作保持元素顺序。...思路解析(优化) 通过设计输入栈和输出栈的双栈结构实现队列功能: 所有入队操作直接压入输入栈 出队操作从输出栈弹出元素 当输出栈为空时,将输入栈所有元素依次弹出并压入输出栈 这种方法使入队和出队操作的时间复杂度均为...O(1),相比原来的实现更高效。

    9410

    C语言栈和队列的实现

    栈可以用很多种方式实现,我们来用较为简单的方法实现,动态顺序表,也就是动态数组 typedef int STDataType; typedef struct stack { STDataType*...2 倍; 用 realloc 调整内存(临时指针接收结果,防止扩容失败丢失原内存),扩容失败则打印错误并退出; 扩容完成 / 栈未满时,将元素存入 top 指向的位置,top 后移一位(指向新插入位)...pnext = space; ps->ptail = space; } ps->size++; } 上一章接提到过,单链表的节点不需要扩容,每一个节点都是固定的大小 功能:基于链表实现队列入队...free(ps->phead); ps->phead = newphead;//ps->phead->pnext错误,这里的phead已经被释放掉了 } ps->size--; } 功能:基于链表实现队列出队...避免空指针操作; 分两种场景处理: 队列仅 1 个节点:释放该节点,头尾指针均置空(防止野指针); 队列多节点:先保存原头节点的下一个节点(新头),再释放原头节点,最后更新头指针; 关键注释提示:不能直接用ps

    11210
    领券