带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)

  • 栈链式存储的特点
  • 链式存储栈的基本操作代码实现
  • 测试结果

栈链式存储的特点

链式存储,可以带头结点,或不带头结点,本篇介绍带头结点的链式存储栈的基本操作。

进栈、出栈都在头结点一侧进行。
由于带有头结点,可不设置栈顶指针,头结点可视为栈顶指针来进行操作。

链式存储栈的基本操作代码实现

/*** 带头节点的链式存储栈*/
#include <cstdio>
#include <malloc.h>/*** 定义结构*/
typedef struct LNode{int data;             //指针域struct LNode *next;   //数据域
}SqStack,*LinkStack;/*** 初始化栈*/
LNode* initStack(LinkStack &linkStack){linkStack = (LinkStack)malloc(sizeof(LNode)); //创建头结点linkStack->data = -1;   //头结点指针域初始化为-1linkStack->next = NULL;return linkStack;
}/*** 判断栈是否为空*/
bool linkStackIsEmpty(LinkStack linkStack){if(linkStack->next == NULL){   // 只有头结点return true;  //栈空}return false;    //栈非空
}/*** 进栈操作(只在头结点进行进栈操作)*/
void push(LinkStack &linkStack,int value){LNode * newNode = (LNode *)malloc(sizeof(LNode)); //创建新结点newNode->data = value;   //给新节点赋值newNode->next = linkStack->next;//指针域linkStack->next = newNode;    //新节点进栈}/*** 出栈操作(在头结点进行出栈)*/
bool pop(LinkStack &linkStack){LNode * delNode;delNode = linkStack->next;  //要出栈的结点if(linkStackIsEmpty(linkStack)){return false;  //栈空}linkStack->next = delNode->next; //头结点的指针域指向删除结点的后一位free(delNode);return true;
}/*** 获取栈顶元素*/
int getTop(LinkStack linkStack){if(linkStackIsEmpty(linkStack)){return -1; //栈空,返回-1}return linkStack->next->data;
}/*** 创建一个完整的栈* @return*/
void creatLinkStack(LinkStack &linkStack){int x;scanf("%d",&x);while(x != 9999){push(linkStack,x);scanf("%d",&x);}
}/*** 打印* @return*/
void printStack(LinkStack linkStack){while(linkStack != NULL){printf("栈里的值(包含头结点)- %d \n",linkStack->data);linkStack= linkStack->next;}
}int main(){LinkStack linkStack;LNode *top;printf("---------初始化--------- \n");top = initStack(linkStack);printf("初始化栈顶指针值(头结点): %d \n",top->data);printf("---------进栈(创建一个完整栈)---------\n");creatLinkStack(linkStack);printf("---------打印---------\n");printStack(linkStack);printf("---------获取栈顶元素---------\n");int top1 = getTop(linkStack);printf("栈顶元素: %d\n",top1);printf("---------出栈---------\n");pop(linkStack);printStack(linkStack);printf("---------获取栈顶元素---------\n");int top2 = getTop(linkStack);printf("栈顶元素: %d\n",top2);return 0;
}

测试结果

---------初始化---------
初始化栈顶指针值(头结点): -1
---------进栈(创建一个完整栈)---------
3
4
2
5
6
9999
---------打印---------
栈里的值(包含头结点)- -1
栈里的值(包含头结点)- 6
栈里的值(包含头结点)- 5
栈里的值(包含头结点)- 2
栈里的值(包含头结点)- 4
栈里的值(包含头结点)- 3
---------获取栈顶元素---------
栈顶元素: 6
---------出栈---------
栈里的值(包含头结点)- -1
栈里的值(包含头结点)- 5
栈里的值(包含头结点)- 2
栈里的值(包含头结点)- 4
栈里的值(包含头结点)- 3

顺序存储栈基本操作:https://blog.csdn.net/qq_35963993/article/details/106025787.

带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)相关推荐

  1. 带头结点的链式表操作集

    6-6 带头结点的链式表操作集 (20 分) 本题要求实现带头结点的链式表操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementTy ...

  2. 链队列的基本运算java_链式队列基本操作的实现问题

    问题描述:用链式存储方式实现队列的基本操作 涉及变量:front:Node型自定义变量,指向队首元素 rear:Node型自定义变量,指向队尾元素 涉及教材:<数据结构--Java语言描述(第2 ...

  3. 二维矩阵节点的链式消除和自动补齐!消消乐类游戏可参考!

    效果预览 操作方法 点击选中开始节点,按住拖动到相邻的节点,相邻节点添加至选择链中,沿着链往回拖,将会取消之前选择的节点,松开手指以后,选择的节点将会消失,空节点上方的节点将会自动掉落,上方自动随机生 ...

  4. c语言二叉树链式存储,二叉树链式存储基本操作(C语言)

    1.二叉链的定义 LinkBinTree.h文件 /** 二叉树结点结构 */ typedef struct _binnode { int data; struct _binnode * lchild ...

  5. C++链式队列基本操作

    1 #include <iostream> 2 #define QUEUEELEMENTTYPE int 3 using namespace std; 4 5 /*结点*/ 6 typed ...

  6. 实验一 链式存储结构的基本操作

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A) 2019年4月27日 学院 计算机科学与教育软件学院 年级.专业.班 计算机科学与技术172班 姓名 xxx 学号 17061 ...

  7. java链式存储_Java实现链式存储的二叉树

    importjava.util.LinkedList;importjava.util.List;importjava.util.Queue;importjava.util.Stack;/***@aut ...

  8. c语言建立队列(顺序队列、循化队列和链式队列)

    c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...

  9. 【数据结构】线性表之双向链式线性表

    2019独角兽企业重金招聘Python工程师标准>>> public class DuLinkList<T> {// 定义一个内部类Node,Node实例代表链表的节点p ...

  10. 数据结构(二)----线性表(List)链式存储结构(1)

    线性表List---链式存储结构 相关概念 链式存储结构/链式表 定义 链式存储特点 单链表 单链表读取 单链表插入 单链表删除 时间复杂度 单链表整表创建 单链表整表删除 顺序存储与链式存储差异 P ...

最新文章

  1. html和css入门 (三)
  2. 【Flask项目2】生成token和验证token(11)
  3. 你试过这样写C程序吗
  4. 修改spfile位置
  5. mysql 集群与主从_Mysql集群和主从
  6. BugkuCTF-WEB题源码
  7. 玩出花,只用文本就能干CV的活!
  8. php 操作mysql 分表的一种方法
  9. 深入浅出Hibernate 笔记一(面向应用的持久层设计)
  10. QuickFlowDesigner教程(4)如何用代码控制活动操作人
  11. 踩坑之路---JWT验证
  12. css在透明的背景下显示白色字体
  13. HDU 1867 A + B for you again(KMP)
  14. Java 小型图书馆管理系统
  15. 邮件裸奔,两大加密协议 PGP 与 S/MIME 被曝明文漏洞;DeepMind AI 能让自己拥有像哺乳动物那样的导航能力...
  16. 网络红人斌少最新资料
  17. python自制简易二维码代码_用python把自己的二维码制作成动态码,一行代码即可搞定!敲简单!...
  18. jenkins-RestAPI调用出现Error 403 No valid crumb was included in the request解决方法
  19. 使用javamail、阿里云邮箱发送邮件
  20. 【Linux】——Ubuntu18.04安装

热门文章

  1. c3p0连接池配置模板,SSM中使用c3p0连接池配置属性
  2. TeamViewer(TV)锁屏后黑屏无法远程的解决方法
  3. 啦啦外卖41.8[四端全开源版本]
  4. GOOGLE地球浏览器分析(五):KML文件基本格式
  5. ISO 19011 《管理体系审核指南》
  6. Matlab数学建模(五):优化模型之标准模型
  7. 微软Bing翻译API的使用
  8. Matlab------在Matlab中如何画圆
  9. html货币相关符号
  10. python处理excel文档_python处理excel文件