首页
学习
活动
专区
圈层
工具
发布

栈(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;...s->top为栈顶下一个元素,top-1为栈顶元素。

48510

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

个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏: C语言进阶 个人信条: 知行合一 本篇简介:>:讲解用c语言实现:“数据结构之"栈”,分别从"顺序栈"和"链栈"的接口讲解....出数据也在栈顶 "栈"的常见接口实现 InitST:初始化栈 STPush:入栈 STPop:出栈 STEmpty:判空(判断是否为空栈) PrintSTTop:打印栈顶元素 STTop:返回栈顶元素...由于是顺序表实现栈,所以在进行插入操作之前要先进行"判满"操作,如果栈满了,要进行扩容. top是指向栈顶下标,需要将其往后移动一位,使其指向待插入位置....(ST* ps);//返回栈顶元素 void STDestory(ST* ps);//栈的销毁 接口实现区( stack.c) #include "stack.h" //初始化栈 void InitST...void STDestory(SLStackNode* ps);//栈的销毁 接口实现区(SLStack.c) #include "SLStack.h" //SLStackNode* InitStack

96720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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语言实现数据结构

    6K20

    栈(用C语言实现)

    但栈要怎么实现呢?使用数组还是用链表? 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优⼀些。 因为数组在尾上插入数据的代价比较小。...相比于数组实现的栈,链表实现需要额外的内存开销来维护节点之间的指针关系,可能导致内存碎片化。 2.动态内存分配:链表实现的栈需要通过动态内存分配来创建和释放节点。...如果需要在栈中进行随机访问元素,链表实现的栈可能不太适合,而数组实现的栈更具优势。  1.3顺序表的优缺点: 优点: 1、尾插尾删效率高。 2、下标的随机访问。...STSize(ST* ps); //栈是否为空 bool STEmpty(ST* ps); 实现栈的文件:Stack.c #include"Stack.h" void STInit(ST...arr[ps->top - 1]; } int STSize(ST* ps) {     assert(ps);     return ps->top; } 测试文件:text.c

    1.3K10

    C语言栈和队列的实现

    (入栈),取盘子也只能从最上面拿(出栈),不能从中间或底部抽,这就是栈的核心逻辑 栈的操作范围被严格限制在栈顶(Stack Top)只有栈顶的元素能被读取或删除,栈底(Stack Bottom)的元素只能等上面所有元素都取出后才能操作...栈可以用很多种方式实现,我们来用较为简单的方法实现,动态顺序表,也就是动态数组 typedef int STDataType; typedef struct stack { STDataType*...pnext = space; ps->ptail = space; } ps->size++; } 上一章接提到过,单链表的节点不需要扩容,每一个节点都是固定的大小 功能:基于链表实现队列入队...申请新链表节点并初始化(存值 x、后继置空),内存申请失败则报错退出; 空队列:头尾指针均指向新节点;非空队列:尾节点后继指向新节点,尾指针移至新节点; 队列元素个数 size 自增,记录有效元素数; 设计特点:链表实现队列...free(ps->phead); ps->phead = newphead;//ps->phead->pnext错误,这里的phead已经被释放掉了 } ps->size--; } 功能:基于链表实现队列出队

    31310

    用队列实现栈(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() 返回栈顶元素。

    77330

    C语言实现顺序栈相关操作

    栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。 这一端被称为栈顶,相对地,把另一端称为栈底。...向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素; 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。...stdbool.h> #define MaxSize 5 typedef struct { int data[MaxSize]; int top; } SqlStack; /** * 初始化栈...* @return */ _Bool Push(SqlStack *stack) { if ((*stack).top == MaxSize - 1) { printf("栈已满...\n"); return true; } printf("非空栈 \n"); return false; } /** * 获取栈顶元素 * @param stack

    1.1K10

    Linux 内核的网络协议栈

    前言 本文主要记录 Linux 内核网络协议栈的运行原理 数据报文的封装与分用 封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议栈中,然后逐一通过 TCP/IP 协议族的每层直到被当作一串比特流送入网络...Linux 内核网络协议栈 协议栈的全景图 协议栈的分层结构 逻辑抽象层级: 物理层:主要提供各种连接的物理设备,如各种网卡,串口卡等。...协议栈实现层级: 硬件层(Physical device hardware):又称驱动程序层,提供连接硬件设备的接口。...该函数的实现在 net/inet/dev.c 中,采用了 bootom half 技术,该技术的原理是将中断处理程序人为的分为两部分,上半部分是实时性要求较高的任务,后半部分可以稍后完成,这样就可以节省中断程序的处理时间...NOTE:在整个协议栈实现中 dev.c 文件的作用重大,它衔接了其下的硬件层和其上的网络协议层,可以称它为链路层模块,或者设备无关层的实现。

    4.4K62

    C语言共享栈

    栈的操作我相信大家都应该了解了弄懂了, 如果没弄懂希望可以去再去看看相关的资料,我博客中的C语言中缀表达式转后缀表达式中涉及到了一下栈的基本操作,有兴趣的朋友也可以看看。...所谓共享栈,就是两个栈共同使用一块内存空间,其中一个栈的栈底作为另一个栈的栈顶,反之亦然。...开始 思路分析 因为两个栈公用一个空间,假设一个栈为0#,规定其为空时top[0]==-1;另一个栈为1#规定其为空时,top[1]==MaxSize; 入栈时,先确定栈号是否合法,然后查看是对0#栈还是...1#栈进行操作,入栈操作和顺序栈的入栈操作并无太大不同。...如若入栈成功则返回0;入栈失败则返回-1; 出栈时,先确定栈号是否合法,然后查看是对0#栈还是1#栈进行操作,出栈操作和顺序栈的出栈操作并无太大不同。 选定之后进行出栈操作。

    1.8K30

    【数据结构】C语言实现链栈

    链栈的C语言实现 前言 大家好,很高兴又和大家见面啦!!!...之后我们也是详细的介绍了如何通过C语言来实现一个共享栈。 在今天的内容中,我们将来探讨一下对内存空间的使用更为灵活的链栈,以及如何通过C语言来实现一个链栈。下面我们就一起来看一下吧!!!...既然是单链表,那我们就可以通过StackNode与LinkStack来区分整个链栈与链栈的结点,下面我们就来看一下如何通过C语言实现链栈的基本操作; 二、链栈的初始化 这里我们想要通过不带头结点的单链表来实现一个链栈...,测试结果如下所示: 从结果中我们可以看到,我们成功通过C语言实现了链栈的初始化到销毁的全部操作。...当然链栈的实现方式肯定不止我这一种,这里我给大家展示的是不带头结点的单链表实现的链栈,我们还可以通过带头结点的单链表实现的链栈,它与不带头结点的单链表实现链栈是有些许区别的,感兴趣的朋友可以自行编写以下对应的代码

    66210

    【数据结构】C语言实现顺序栈

    顺序栈的C语言实现 导言 大家好,很高兴又和大家见面啦!!! 在上一个篇章中,我们介绍了栈的基本概念,以及栈中的重要术语。通过介绍我们知道了栈的本质也是一种线性表,只不过它是一种操作受限的线性表。...因此栈的实现方式与线性表的实现实际上是大同小异的。下面我们就来介绍一下如何通过C语言实现栈。 一、栈的分类 栈作为一种操作受限的线性表,它在存储时根据存储方式的不同,分为两类——顺序栈与链栈。...下面我们将来介绍第一类栈——顺序栈的C语言实现; 二、顺序栈 通过顺序存储的线性表我们称为顺序表,同样,通过顺序存储的栈我们将其称为顺序栈。...从出栈的操作顺序我们可以看到,对于栈顶指针,我们是先使用,再对其进行-1的操作,在C语言中后置--这个操作符刚好也是符合这个规则,因此这里我们可以将其改写为: //顺序栈的出栈操作 bool Pop(SqStack...结语 现在对于顺序栈的基本C语言实现我们就全部介绍完了,希望这篇内容能帮助大家更好的学习和理解顺序栈的相关知识点。在下一篇内容中,我们会介绍如何通过C语言实现共享栈,大家记得关注哦!

    1.2K10
    领券