带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)
带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)
- 栈链式存储的特点
- 链式存储栈的基本操作代码实现
- 测试结果
栈链式存储的特点
链式存储,可以带头结点,或不带头结点,本篇介绍带头结点的链式存储栈的基本操作。
进栈、出栈都在头结点一侧进行。
由于带有头结点,可不设置栈顶指针,头结点可视为栈顶指针来进行操作。
链式存储栈的基本操作代码实现
/*** 带头节点的链式存储栈*/
#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.
带头节点的链式存储栈基本操作(进栈、出栈、获取栈顶元素)相关推荐
- 带头结点的链式表操作集
6-6 带头结点的链式表操作集 (20 分) 本题要求实现带头结点的链式表操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementTy ...
- 链队列的基本运算java_链式队列基本操作的实现问题
问题描述:用链式存储方式实现队列的基本操作 涉及变量:front:Node型自定义变量,指向队首元素 rear:Node型自定义变量,指向队尾元素 涉及教材:<数据结构--Java语言描述(第2 ...
- 二维矩阵节点的链式消除和自动补齐!消消乐类游戏可参考!
效果预览 操作方法 点击选中开始节点,按住拖动到相邻的节点,相邻节点添加至选择链中,沿着链往回拖,将会取消之前选择的节点,松开手指以后,选择的节点将会消失,空节点上方的节点将会自动掉落,上方自动随机生 ...
- c语言二叉树链式存储,二叉树链式存储基本操作(C语言)
1.二叉链的定义 LinkBinTree.h文件 /** 二叉树结点结构 */ typedef struct _binnode { int data; struct _binnode * lchild ...
- C++链式队列基本操作
1 #include <iostream> 2 #define QUEUEELEMENTTYPE int 3 using namespace std; 4 5 /*结点*/ 6 typed ...
- 实验一 链式存储结构的基本操作
广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A) 2019年4月27日 学院 计算机科学与教育软件学院 年级.专业.班 计算机科学与技术172班 姓名 xxx 学号 17061 ...
- java链式存储_Java实现链式存储的二叉树
importjava.util.LinkedList;importjava.util.List;importjava.util.Queue;importjava.util.Stack;/***@aut ...
- c语言建立队列(顺序队列、循化队列和链式队列)
c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...
- 【数据结构】线性表之双向链式线性表
2019独角兽企业重金招聘Python工程师标准>>> public class DuLinkList<T> {// 定义一个内部类Node,Node实例代表链表的节点p ...
- 数据结构(二)----线性表(List)链式存储结构(1)
线性表List---链式存储结构 相关概念 链式存储结构/链式表 定义 链式存储特点 单链表 单链表读取 单链表插入 单链表删除 时间复杂度 单链表整表创建 单链表整表删除 顺序存储与链式存储差异 P ...
最新文章
- html和css入门 (三)
- 【Flask项目2】生成token和验证token(11)
- 你试过这样写C程序吗
- 修改spfile位置
- mysql 集群与主从_Mysql集群和主从
- BugkuCTF-WEB题源码
- 玩出花,只用文本就能干CV的活!
- php 操作mysql 分表的一种方法
- 深入浅出Hibernate 笔记一(面向应用的持久层设计)
- QuickFlowDesigner教程(4)如何用代码控制活动操作人
- 踩坑之路---JWT验证
- css在透明的背景下显示白色字体
- HDU 1867 A + B for you again(KMP)
- Java 小型图书馆管理系统
- 邮件裸奔,两大加密协议 PGP 与 S/MIME 被曝明文漏洞;DeepMind AI 能让自己拥有像哺乳动物那样的导航能力...
- 网络红人斌少最新资料
- python自制简易二维码代码_用python把自己的二维码制作成动态码,一行代码即可搞定!敲简单!...
- jenkins-RestAPI调用出现Error 403 No valid crumb was included in the request解决方法
- 使用javamail、阿里云邮箱发送邮件
- 【Linux】——Ubuntu18.04安装