当前位置: 首页 > news >正文

【数据结构】链表栈

目录:

  • 链表栈
    • 1. 链式栈的实现
    • 2. 链表栈的创建
    • 3. 压栈
    • 4. 弹栈

链表栈

栈的主要表示方式有两种,一种是顺序表示,另一种是链式表示。本文主要介绍链式表示的栈。
链栈实际上和单链表差别不大,唯一区别就在于只需要对链表限定从头部进行删除元素和增加元素就可以了。

1. 链式栈的实现

链式栈的实现,是通过先定义一个结构体节点,然后定义一个指向该结构体的指针,通过该指针来操作栈。
示例代码如下:

typedef struct node {struct node* next;  /* 指向下一个节点的指针 */int data;           /* 数据域 */
} Node;
typedef Node *Stack;

其中Stack是一个指向Node的指针,通过该指针可以访问链式栈的栈顶元素。

2. 链表栈的创建

类似于链表的创建,链表栈也分头结点和不带头结点两种。这里为了方便起见,我们决定使用带头结点的版本。
示例代码如下:

void InitStack(Stack *S)
{*S=(Stcak)malloc(sizeof(Node));if(S==NULL){return;}*S->next=NULL;
}

3. 压栈

在进行压栈操作时,我们规定只在链表的头部进行插入,即在头结点之后插入一个元素,使得这个元素的指针指向头结点的下一个元素,然后让头结点的指针指向这个元素。
示例代码如下:

bool Push(Stack *S,int x)
{Node *p=(Stack)malloc(sizeof(Node));p->next=*S->next;p->data=x;*S->next=p;return true;
}

4. 弹栈

同样的,我们也只需要在头部进行删除元素即可
示例代码如下:

int Pop(Stack *S,int *x)
{Node *p=S;p=S->next;Node *q=p->next;S->next=q;*x=p->data;free(p);
}
http://www.lryc.cn/news/183647.html

相关文章:

  • Android笔记:Android 组件化方案探索与思考
  • MeterSphere v2.10.X-lts 双节点HA部署方案
  • Java进阶篇--网络编程
  • PyTorch入门之【CNN】
  • 马斯洛需求层次模型之安全需求之云安全浅谈
  • Pikachu靶场——远程命令执行漏洞(RCE)
  • 【WSN】无线传感器网络 X-Y 坐标到图形视图和位字符串前缀嵌入方法研究(Matlab代码实现)
  • Linux定时任务
  • 【Overload游戏引擎分析】画场景网格的Shader
  • 【JavaEE】多线程进阶(一)饿汉模式和懒汉模式
  • C++树详解
  • 支付环境安全漏洞介绍
  • 抄写Linux源码(Day16:内存管理)
  • Cookie和Session详解以及结合生成登录效果
  • Spring基础以及核心概念(IoC和DIQ)
  • 《C和指针》笔记32:多维数组初始化
  • 零食食品经营小程序商城的作用是什么
  • Java泛型--什么是泛型?
  • LabVIEW工业虚拟仪器的标准化实施
  • JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域
  • 汇编指令集合
  • TinyWebServer整体流程
  • 【Java项目推荐之黑马头条】自媒体文章实现异步上下架(使用Kafka中间件实现)
  • 自学(黑客)技术方法————网络安全
  • python+playwright 学习-84 Response 接口返回对象
  • GCN详解
  • 总结二:linux面经
  • 12、【Qlib】【主要组件】Qlib Recorder:实验管理
  • 三一充填泵:煤矿矸石无害化充填,煤炭绿色高效开采的破局利器
  • 医疗器械标准目录汇编2022版共178页(文中附下载链接!)