链式栈的C语言实现

C语言链式栈的操作和实现 栈是限定仅在表尾进行插入或删除的线性表; 后进先出 代码如下:#include<stdio.h> #include<stdlib.h> #include<malloc.h> //定义一个节点的结构 typedef struct node { int data; struct node *pNext; }Node,*pNode; //定义栈结构 typedef struct sta 阅读详情

最近在复习之前学的知识,这是之前写的了,温故而知新

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

typedef struct Node
{
    int data;
    struct Node * pNext;
}NODE, * PNODE;

typedef struct Stack
{
    PNODE pTop;
    PNODE pBottom;
}STACK, * PSTACK;  //PSTACK 等价于 struct STACK *

void init(PSTACK);
void push(PSTACK, int );
void traverse(PSTACK);
bool pop(PSTACK, int *);
void clear(PSTACK pS);

int main(void)
{
    STACK S;  //STACK 等价于 struct Stack
    int val;

    init(&S);  //目的是造出一个空栈
    push(&S, 1); //压栈
    push(&S, 2);
    push(&S, 3);
    push(&S, 4);
    push(&S, 5);
    push(&S, 6);
    traverse(&S); //遍历输出

    clear(&S);
    //traverse(&S); //遍历输出

    if ( pop(&S, &val) )
    {
        printf("出栈成功,出栈的元素是%d\n", val);
    }
    else
    {
        printf("出栈失败!\n");
    }

    traverse(&S); //遍历输出

    return 0;
}

void init(PSTACK pS)
{
    pS->pTop = (PNODE)malloc(sizeof(NODE));
    if (NULL == pS->pTop)
    {
        printf("动态内存分配失败!\n");
        exit(-1);
    }
    else
    {
        pS->pBottom = pS->pTop;
        pS->pTop->pNext = NULL; //pS->Bottom->pNext = NULL;
    }
}

void push(PSTACK pS, int val)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));

    pNew->data = val;
    pNew->pNext = pS->pTop; //pS->Top不能改成pS->Bottom
    pS->pTop = pNew;

    return;
}

void traverse(PSTACK pS)
{
    PNODE p = pS->pTop;

    while (p != pS->pBottom)
    {
        printf("%d  ", p->data);
        p = p->pNext;
    }
    printf("\n");

    return;
}

bool empty(PSTACK pS)
{
    if (pS->pTop == pS->pBottom)
        return true;
    else
        return false;
}

//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,返回false,否则返回true
bool pop(PSTACK pS, int * pVal)
{
    if ( empty(pS) )
    {
        return false;
    }
    else
    {
        PNODE r = pS->pTop;
        *pVal = r->data;
        pS->pTop = r->pNext;
        free(r);
        r = NULL;

        return true;
    }
}

//clear清空
void clear(PSTACK pS)
{
    if (empty(pS))
    {
        return;
    }
    else
    {
        PNODE p = pS->pTop;
        PNODE q = NULL;

        while (p != pS->pBottom)
        {
            q = p->pNext;
            free(p);
            p = q;
        }
        pS->pTop = pS->pBottom;
    }
}
链式栈的操作及实现(C语言) 链式栈的操作及实现 该代码包含链式表的建立,出栈,入栈,返回top指针,判空,删除栈,返回栈顶元素(不删除). 注意: 该链表为带头节点的链式表,基节点的数据域为-1. 代码如下. #include <stdio.h> #include <stdlib.h> typedef struct node { int data; //数据域 struct node* next; //指针域 }node; //创建节点 node* c 阅读详情

相关推荐

《数据结构》C语言实现:链式栈操作详解

在数据结构中,链式栈是一种采用链表实现的后进先出(LIFO)的栈结构。理解链式栈的结构对于实现高效的栈操作至关重要。链式栈的节点通常包含两个部分:数据域和指向下一个节点的指针域。数据域用于存储栈中的数据,而指针域则用于连接下一个节点,形成一个链表结构。int data;// 数据域,存储栈内元素// 指针域,指向下一个节点每个栈节点都是链表中的一部分,整个栈是由这些节点链接而成的。通过指针域,可以轻松地对栈进行元素的增加和删除操作。

weixin_42405592的博客 793

C语言 数据结构 之 链式栈

栈的链式存储结构简称为 链式栈 链式栈是通过单链表来实现的。每次入栈一个元素,向链表中添加一个节点(相当于头插法),出栈一个元素,释放一个节点。 链式栈是通过单链表来实现的。每次入栈一个元素,向链表中添加一个节点,出栈一个元素,释放一个节点。因为栈具有“后进先出”的特点,如果每次在链表的尾部进行插入和删除,就要遍历整个链表来找到尾节点。而在头部进行插入和删除时,只需根据头指针即可找到链表的首元素结点。而无需遍历链表。所以链式栈的出,入栈通过对链表进行头删和头插来实现。 1. 链式栈的结点结构

weixin_40933653的博客 4539

链式栈定义

链式栈定义以及实现,数据结构及算法的作业题

数据结构——链式栈【c语言版】

栈(stack)是一种只能在一端插入或删除操作的线性表。(既操作受限的线性表) 栈只能在表尾插入或删除元素,表尾就是栈的栈顶,表头就是栈底 栈的主要特点:LIFO(last in first out) "后进先出" 栈可以采用顺序存储结构(顺序栈)和链式存储结构(链式栈) 既然栈可以用顺序存储结构来实现,那为什么还需要链式栈呢? 链栈的优点是不存在栈满上溢的情况 规定,链式栈的所以操作都是在单链表的表头进行的(因为给定链式栈以后,我们可以知道头结点的...

clear-ninghongkang的博客 7861

UWB定位原理详细介绍

Hello大家好我是小智,今天我来给大家介绍下超宽带的定位原理,首先我们来讲下什么是UWB技术。 超宽带(Ultra Wide Band)简称UWB,和我们熟悉的WIFI、蓝牙技术一样属于通信技术的一种,UWB是一种无线载波通信技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,其所占的频谱范围很宽,右图是一种典型的正弦载波信号图。 UWB这种技术有什么特点呢? UWB系统结构实现简单;2.具有高速的数据传输能力;3.功耗低;4.安全性高;5.多径分辨能力强;6.可用于精确定位等特点。 UWB.

qq_35699674的博客 2万+

在win10系统上安装opnet14.5注意事项和步聚

opnet 14.5安装避坑!

miracle_eicont的专栏 1038

【数据结构】链式栈的实现(C语言)

栈的链式存储称为链式栈,链式栈是一种特殊的单链表,它的插入和删除规定在单链表的同一端进行。链式栈的栈顶指针一般用top表示。(个人理解:相当于只对单链表的第一个结点进行操作) 链式栈要掌握以下基本操作: 1、建立一个空链式栈 2、判断链式栈是否为空 3、读链式栈的栈顶节点值 4、输出链式栈中个结点的值 5、向链式栈中插入一个值为x的结点(进栈) 6、删除链式栈的栈顶结点(出栈) ...

( :3 ) 2712

树莓派4B+红外传感器:手把手教你DIY一个能走黑线的智能小车(Python代码全解析)

本文详细介绍了如何使用树莓派4B和红外传感器DIY一个智能循迹小车,包括硬件配置、GPIO连接、Python代码实现及优化算法。通过动态PWM调速、状态机设计和赛道记忆算法,提升小车的循迹性能和稳定性。适合初学者和电子爱好者动手实践。

weixin_29188043的博客 269

数据结构:栈的链式实现(C语言描述)

栈本质上是一个线性表,只不过对线性表的操作进行了限制,只可以在表的一端进行操作(插入、删除元素)。栈是一种是一种实现数据“先进后出”的存储结构,分为静态栈和动态栈,静态栈就是以数组的方式存储数据,动态栈是以链表的方式存储数据;对栈的操作算法,常用的就是压栈和出;下面将以链式的方式创建栈,并对用c语言实现栈的压栈和出栈的算法: 1.栈的创建     在创建一个数据结构之前,必须知道这种数据结构由

lpp0900320123的专栏 1万+

【学习笔记】人群归因分数 PAF 以及combined PAF(更新)

在此推荐2篇发表在lancet以及jama子刊上的paf文章,这两篇文章套路是一样的,只是在不同国家进行。希望对大家学习PAF有所帮助,后面有新内容也会继续分享,也欢迎大家分享使用R语言计算PAF的经验~~~的时候,先建立了相关矩阵,再做主成分分析,得到communality。详细信息大家可翻阅原文。

weixin_53499537的博客 1498

团子杂记:SAP收入确认工具RAR(Revenue Recognition&Reporting)在新收入准则下的应用

SAP收入确认工具RAR知识分享

Lucas1211的博客 4284

【数据结构】栈的链式储存结构的c语言实现

栈的链式储存结构的c语言实现 文章目录栈的链式储存结构的c语言实现链栈的基本定义链栈的基本操作结构体的定义链栈的初始化栈的入栈函数栈的出栈函数返回栈的长度得到栈顶元素打印出该链栈 链栈的基本定义 采用链式存储结构实现的栈称为链栈,链栈通常采用单链表来实现,因此其结构与单链表的结构相似,由于栈的插入和删除操作仅限制在栈顶位置进行,所以采用单链表的表头指针作为栈顶指针。链栈是一种特殊的线性链表,和所...

只鱼 2512

在Qt中使用EtherCAT-SOEM的初始化中,状态机卡在PreOp->Save-Op过程中,出现State=0x12, Error=0x001e错误的解决办法

1.在调试EtherCAT软件过程中,一直出现配置从站进不了Save_op状态,通过下函数检查从站状态: //使用的从站编号为1 只有1个从站 ec_slave[1].state = EC_STATE_SAFE_OP; ec_writestate(1); //设置到安全模式 ec_statecheck(1, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4); printf("Slave %d State=0x%2.2x StatusCode=0x%4

zeal_for_rov的博客 6828

栈的链式存储结构(c语言实现)

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define T 1 #define F 0 typedef int Status; typedef int ElemType; typedef struct StackNode//链式存储的结点 { ElemType data;//数据域 struct StackNode* nex...

欢迎来到我的空间 1297

第1章 环境准备

本章是 Kubernetes 高可用集群部署的前置基础环境配置,所有节点必须严格按顺序执行。主要内容包括:节点规划(IP、角色、配置要求)、VMware 克隆节点环境清理(解决 MAC 地址和主机名冲突)、统一工作目录创建、主机名与 hosts 解析配置、系统基础升级、防火墙与 swap 关闭、内核模块加载(overlay、br_netfilter、ip_vs)、网络参数优化(IP 转发、桥接过滤)、时间同步配置等。Ubuntu 24.04 内核 6.8+ 原生支持 eBPF 和 IPVS,无需手动升级内核

幸福街--linux技术分享 210

【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件

目录 1 创建一个AUTOSAR系统描述 2 物理层命名以及创建ECU 3 新建一个Frame 4 新建一个PDU 5 新建一个signal 6 结尾 AUTOSAR System Description Network Explorer是一个文件编辑器,支持可视化和编辑系统描述的AUTOSAR系统描述文件和ECU摘录的通信内容,它支持架构版本4.0.3、4.1.2、4.2.1、4.2.2和4.3.0。AUTOSAR系统描述(ARXML)文件是基于XML的文件格式,描述网络通信的元素...

「汽车电子助手」的博客 1万+

C语言实现链式栈

#include "link_stack.h" /************************* 创建 入栈 出栈 是否为空 获取栈顶数据 清空栈 *************************/ //创建 void creat_link_stack_1(pLinkStack *stack) { (*stack) = (pLinkStack)malloc(sizeof(tLinkStack)); if(NULL == (*stack)) { printf(.

Ctrl+C Ctrl+V 462

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

c语言的栈链式存储及实现,栈的链式存储实现c语言

栈的链式存储栈的基本操作c语言实现#include#includeusing namespace std;typedef int ElemType;typedef struct StackNode{ //结点定义ElemType data;struct StackNode *next;}StackNode,*LinkStack;typedef struct Stack{StackNode *H...

weixin_35740545的博客 212

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构C语言实现链式栈模板

C语言链式栈模板 #include <stdio.h> #include <stdlib.h> /************************************************ * C语言链式栈模板 * * 1.InitLinkStack(ElemType data) 初始化链式栈:动态 * 创建头结点,为头结点数据域赋值,为头结点的next赋NULL * 值. * * 2.PopLinkStack(LinkStack *stack) 出栈:头结点

weixin_45622395的博客 326

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

栈的链式实现(c语言)

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; /*实现链栈*/ typedef struct StackNode{ int data; struct StackNode *next; }StackNode; /*初始化*/ StackNode * initStack(){ StackNode * stack; ...

novjam的博客 237

C语言之链式栈简单实现

代码如下: /* 链式栈:实现接口 判栈空 返回栈顶元素 入栈 出栈 遍历栈 */ #include <stdio.h> #include <stdlib.h> //栈节点 typedef struct linkstack { int data; struct linkstack *pNext; }LINKSTACK_T; typedef struct stack { LINKSTACK_T *Top; LINKSTACK_T *Buttom; int

weixin_44105987的博客 353

c语言实现链式栈

C语言实现链式栈C语言实现链式栈

weixin_39897534的博客 731

C语言 链式栈和顺序栈的实现

1、简介: 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 术语解释: 栈顶(Top) :允许数据插入和删除的端,即栈的顶端。 栈底(Bottom):固定并且不允许进行插入和删除操作的一端,即栈底。 栈空:即不含有任何元素的栈。 进栈、入

weixin_44636409的博客 1229

使用C语言实现链式栈

栈的链式实现(C语言)

Broken_x的博客 1992

c语言实现栈的链式存储

//栈的链式存储结构 #include "stdio.h" #include "stdlib.h" typedef struct snode{ int data; struct snode *next; }*linkstack,snode; //入栈 linkstack pushin(linkstack p,int e) { linkstack m; m = (linkstack)...

sinat_38205774的博客 203

顺序栈,链式栈的操作(c语言实现)

顺序栈 定义:利用顺序储存结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的元素。 栈顶的位置不存放元素 操作: 1.初始化栈 2.判断是否为空栈 3.向栈中压入元素 4.取栈顶元素 5.元素出栈 说明:取栈顶元素和元素出栈的本质是不同的,后面有代码说明 图片转自https://blog.youkuaiyun.com/qq_25775935/article/details/88558779 未存放元素时,top指向a[0]的位置,如果放入了一个元素,则top指向a[1]的位置 链式栈 定义:采用链式储存结

qq_45820763的博客 1011
上一篇: 链式队列C++实现
下一篇: 自己看的和整理的一些经典技术博客列表BLOG
MoreTechSEU
博客等级 码龄12年 6粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值