一、链栈的定义:

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct StackNode
{ElemType data;struct StackNode *next;
}StackNode,*LinkStack;

二、初始化:

Status InitStack(LinkStack &S)
{//构建一个空栈,栈顶指针置空 S=NULL;return OK;
}

三、入栈:

算法步骤:

①为入栈元素e分配空间,用指针p指向;

②将新节点数据域置为e;

③将新节点插入栈顶;

④修改栈顶指针为p;

Status Push(LinkStack &S,int e)
{//在栈顶插入元素e; StackNode *p;p=new StackNode;//生成新的节点p->data=e;//将新的节点数据域置为e; p->next=S; //将新的节点插入栈顶;S=p;//修改栈顶指针p; return OK;
}

四、出栈:

算法步骤:

①判断栈是否为空,若空则返回ERROR;

②将栈顶元素赋给e;

③临时保存栈顶元素空间,以备释放;

④修改栈顶指针,指向新的栈顶元素;

⑤释放原栈顶元素空间;

Status Pop(LinkStack &S)
{//删除S的栈顶元素,用e返回其值LinkStack p;p=new StackNode;int e;if(S==NULL) return ERROR;//栈空;e=S->data;//将栈顶元素赋给e;p=S;//用p临时保存栈顶元素空间,以备释放;S=S->next;//修改栈顶指针;delete p;//释放原栈顶元素空间;return e;
}

五、取栈顶元素:

算法步骤:

①判断是否为空;

②直接返回栈顶值;

Status GetTop(LinkStack &S)
{//返回S的栈顶元素,不修改栈顶指针;if(S!=NULL)//栈非空;return S->data;//返回栈顶元素的值,栈顶指针不变;
}

六、主函数:

int main()
{LinkStack S;InitStack(S);printf("请输入元素个数:");int x;scanf("%d",&x);int e;printf("请输入元素:");for(int i=0;i<x;i++){scanf("%d",&e);Push(S,e);//在栈顶插入元素e;}printf("栈顶元素为:%d",GetTop(S));//返回S的栈顶元素,不修改栈顶指针;printf("\n");printf("元素遍历:");for(int i=0;i<x;i++){printf("%d ",Pop(S));//删除S的栈顶元素,用e返回其值}return 0;
}

七、完整代码:

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct StackNode
{ElemType data;struct StackNode *next;
}StackNode,*LinkStack;
Status InitStack(LinkStack &S)
{//构建一个空栈,栈顶指针置空 S=NULL;return OK;
}Status Push(LinkStack &S,int e)
{//在栈顶插入元素e; StackNode *p;p=new StackNode;//生成新的节点p->data=e;//将新的节点数据域置为e; p->next=S; //将新的节点插入栈顶;S=p;//修改栈顶指针p; return OK;
}
Status Pop(LinkStack &S)
{//删除S的栈顶元素,用e返回其值LinkStack p;p=new StackNode;int e;if(S==NULL) return ERROR;//栈空;e=S->data;//将栈顶元素赋给e;p=S;//用p临时保存栈顶元素空间,以备释放;S=S->next;//修改栈顶指针;delete p;//释放原栈顶元素空间;return e;
}
Status GetTop(LinkStack &S)
{//返回S的栈顶元素,不修改栈顶指针;if(S!=NULL)//栈非空;{return S->data;//返回栈顶元素的值,栈顶指针不变;}}int main()
{LinkStack S;InitStack(S);printf("请输入元素个数:");int x;scanf("%d",&x);int e;printf("请输入元素:");for(int i=0;i<x;i++){scanf("%d",&e);Push(S,e);//在栈顶插入元素e;}printf("栈顶元素为:%d",GetTop(S));//返回S的栈顶元素,不修改栈顶指针;printf("\n");printf("元素遍历:");for(int i=0;i<x;i++){printf("%d ",Pop(S));//删除S的栈顶元素,用e返回其值}return 0;
}

八、运行结果:

链栈的定义、构建、入栈、出栈和取栈顶元素相关推荐

  1. 剑指offer 31.栈的、压入弹出序列

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是 ...

  2. 栈的操作(入栈、出栈)之一:顺序栈

    栈操作原则 使用栈操作数据,必须遵循"先入后出"的原则: 栈操作之顺序栈 使用顺序表实现栈的存储结构,本质上是数组,数组的一端做栈底,另一端做栈顶: 一个数组其下标最低的位置可当做 ...

  3. 【Unity】渐入渐出的黑屏(白屏)过场动画最简单的实现

    一个简单的黑屏动画,用于2D项目,效果类似慢眨眼.进/出房间时切换场景的衔接过渡. 这种效果的实现方式其实蛮多的,我能想到的包括用shader,用一张全黑Sprite覆盖屏幕,或者直接做成一个UI. ...

  4. 链栈的创建,入栈,出栈!

    代码内容:链栈的创建,入栈,出栈! 数据元素为数字! 主要函数: void In(LinkStack L) //前插法建立含有n个数字的链栈 void Pop(LinkStack L, int e)/ ...

  5. 链栈的创建,入栈,出栈,获取栈顶元素

    链栈的创建,入栈,出栈,获取栈顶元素 #include <stdio.h> #include <stdlib.h> #define Max 5 typedef struct L ...

  6. 数据结构与算法--举例分析法- 栈的压入弹出序列

    举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...

  7. C++栈的初始化,入栈,出栈,获取栈顶元素等操作

    栈的一些性质: 1.栈为空不可以出栈 2.栈顶元素先出 3.新元素插入栈顶 栈的初始化: #include<iostream> #include<string> using n ...

  8. C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)

    //顺序栈的基本操作 #include<stdio.h> #define MaxSize 50 typedef int ElemType; //定义栈结构体 typedef struct ...

  9. 【数据结构】栈详解——压栈/入栈 | 弹栈/出栈 | 获取栈顶元素

    栈 顺序栈 栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈, ...

最新文章

  1. 浅析Node模块中module.exports与exports的关系
  2. Web自适应布局你需要知道的所有事儿
  3. 转:Webkit Flex伸缩盒模型属性备忘
  4. oracle 怎么备份sqlserver数据库,Oracle和sqlserver数据库的备份与恢复
  5. android double值排序,android根据Double类型数据经纬度算出距离再根据距离实现排序功能...
  6. Terracotta - 分布式共享对象
  7. 嵌入式系统的接口类型有哪些
  8. NetOps Defined
  9. Java源码分析之CountDownLatch
  10. DRM在Android中
  11. [LuoGu] P3957 跳房子
  12. CNCAP2021版 主动安全ADAS系统试验方法
  13. 方法finalizer()的应用
  14. backtrader 自定义indicator_BackTrader回测工具(一)
  15. 全局负载均衡GSLB
  16. Excel自定义排序(可按某一列排序)
  17. 怎样引流推广?一文讲透引流的核心秘密
  18. 15个常用excel函数公式_会计财务最常用的15个公式函数,建议收藏
  19. python中iadd与add_如何为Python属性实现-uyu iadd_uu
  20. 一些vue功能和css样式

热门文章

  1. python获取上一级目录
  2. Google analytics是什么,有什么作用
  3. KCL缓释剂以及金钙尔奇钙片有什么作用?怎样作用?//2021-2-7
  4. 强制应用横竖屏的简单设置
  5. matlab 五数总括,Matlab 数据类型  五、表
  6. Windows上使用ionic开发IOS程序
  7. iOS开发技术-实验一-简易计算器实现
  8. 计算机和共享打印机不在一个网络打印机共享,不在同一个局域网怎么样设置打印机共享...
  9. Linux基础 linux账号及权限管理
  10. STC89系列单片机看门狗的使用及应用程序