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

数据结构----链式栈的操作

链式栈的定义其实和链表的定义是一样的,只不过在进行链式栈的操作时要遵循栈的规则----即“先进后出”。
1.链式栈的定义
typedef struct StackNode
{SElemType data;struct StackNode *next;
}StackNode,*LinkStack;
2.链式栈的初始化
Status InitStack(LinkStack &S){//链式栈的初始化S=NULL;//构造一个空栈S,将栈顶指针置空return OK;
}
3.入栈操作
Status Push(LinkStack &S,SElemType e){//元素入栈StackNode *p;p=new StackNode;p->data=e;p->next=S;S=p;return OK;
}
4.出栈操作
Status Pop(LinkStack &S,SElemType &e){//元素出栈if(S==NULL) return ERROR;e=S->data;StackNode *p;p=S;S=S->next;delete p;return OK;
}
5.获取栈顶元素
Status GetTop(LinkStack S){//获取栈顶元素if(S!=NULL) return S->data;
}
6.遍历栈中元素
Status printfStack(LinkStack S){//遍历链式栈中的元素StackNode *p;p=S;printf("链式栈中的元素为:");while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");
}
7.获取栈的长度
int StackLength(LinkStack S){//获取栈的长度StackNode *p;p=S;int count=0;while(p!=NULL){count++;p=p->next;}printf("栈的长度为:%d\n",count);
}
8.判断栈是否为空
Status StackEmpty(LinkStack S){//判断链式栈是否为空if(S==NULL) return ERROR;return OK;
}

9.主程序代码

#include<stdio.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef int SElemType;
typedef struct StackNode
{SElemType data;struct StackNode *next;
}StackNode,*LinkStack;
Status InitStack(LinkStack &S){//链式栈的初始化S=NULL;return OK;
}
Status Push(LinkStack &S,SElemType e){//元素入栈StackNode *p;p=new StackNode;p->data=e;p->next=S;S=p;return OK;
}
Status Pop(LinkStack &S,SElemType &e){//元素出栈if(S==NULL) return ERROR;e=S->data;StackNode *p;p=S;S=S->next;delete p;return OK;
}
Status GetTop(LinkStack S){//获取栈顶元素if(S!=NULL) return S->data;
}
Status printfStack(LinkStack S){//遍历链式栈中的元素StackNode *p;p=S;printf("链式栈中的元素为:");while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");
}
int StackLength(LinkStack S){//获取栈的长度StackNode *p;p=S;int count=0;while(p!=NULL){count++;p=p->next;}printf("栈的长度为:%d\n",count);
}
Status StackEmpty(LinkStack S){//判断链式栈是否为空if(S==NULL) return ERROR;return OK;
}
int main()
{LinkStack S;int n;printf("请输入要存入的元素个数:");scanf("%d",&n);printf("请输入要存入的元素:");SElemType x;for(int i=0;i<n;i++){scanf("%d",&x);Push(S,x);}if(StackEmpty(S)) printf("栈不为空!\n");else printf("栈为空!\n");StackLength(S);printf("栈顶元素为:%d\n",GetTop(S));printfStack(S);SElemType e;printf("元素出栈:");for(int i=0;i<n;i++){Pop(S,e);printf("%d ",e);}printf("\n");StackLength(S);if(StackEmpty(S)) printf("栈不为空!\n");else printf("栈为空!\n");return 0;
}

运行结果

英国有句谚语叫“April showers bring May flowers.”翻译过来就是——四月的雨水带来五月的鲜花。即“苦尽甘来”之意。希望大家生活带甜,幸福开心。

http://www.lryc.cn/news/230435.html

相关文章:

  • 识别伪装IP的网络攻击方法
  • C 语言指针
  • 学【Java多态】-- 写高质量代码
  • 【汇编】内存的读写与地址空间、寄存器及数据存储
  • DSP生成hex方法
  • GZ038 物联网应用开发赛题第7套
  • ELK之Logstash解析时间相差8h的问题
  • uniapp+vite+vue3开发跨平台app,运行到安卓模拟器调试方法
  • Ubuntu诞生已经19年了
  • 跟着基金买,别墅靠大海?买基金重仓股票,会破产吗?| 附最新选股结果
  • 【教3妹学编辑-mysql】mybatis查询条件遇到的坑及解决方案
  • 032-从零搭建微服务-定时服务(一)
  • 精通Nginx(11)-缓存
  • 用excel计算矩阵的乘积
  • 【微软技术栈】C#.NET 中使用依赖注入
  • 开启学历新征程,电大搜题助您轻松获取知识
  • Redis 安装
  • Windows GitBash解决Github添加密钥时提示Key is already in use的问题
  • 第1关:简单查询
  • Android设计模式--Builder建造者模式
  • css实现鼠标悬停时元素的显示与隐藏
  • 天气越来越寒冷,一定要注意保暖
  • 03 # 类型基础:动态类型与静态类型
  • Python编程——模块、包和__init__.py
  • 220kV110kV10kV变电站初步设计
  • Git企业开发级讲解(一)
  • 【微信支付通知】对resource解密 AEAD_AES_256_GCM算法工具类
  • JVM虚拟机:垃圾回收之三色标记
  • 唯坚持而已
  • 【大语言模型】Docker部署清华大学ChatGLM3教程