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

news/2025/3/25 4:55:26/
链式栈的定义其实和链表的定义是一样的,只不过在进行链式栈的操作时要遵循栈的规则----即“先进后出”。
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.ppmy.cn/news/1217331.html

相关文章

java反射原理

Java反射是一种在运行时检查、获取和操作类、接口、方法和属性的能力。它是Java语言的一种重要特性&#xff0c;提供了一种强大的动态编程方式。 Java反射的原理是基于Java虚拟机&#xff08;JVM&#xff09;的类加载机制&#xff0c;利用Java反射API可以获取一个已加载的类的…

office365 outlook邮件无法删除

是否遇到过&#xff0c;office365邮件存储满了&#xff0c;删除邮件无法删除&#xff0c;即便用web方式登录到outlook&#xff0c;删除邮件当时是成功的&#xff0c;但一会儿就回滚回来了&#xff0c;已删除的邮件&#xff0c;你想清空&#xff0c;最后清理后还是回到原样。 请…

Mistral 7B 比Llama 2更好的开源大模型 (二)

Mistral 7B 论文学习 Mistral 7B 论文链接 https://arxiv.org/abs/2310.06825 代码: https://github.com/mistralai/mistral-src 网站: https://mistral.ai/news/announcing-mistral-7b/ 论文摘要 Mistral 7B是一个70亿参数的语言模型,旨在获得卓越的性能和效率。Mistral 7…

在Win11中使用docker安装Oracle19c

在Win11中使用docker安装Oracle19c 首先是去docker官网下 docker for windows安装oracle19c首先下载image运行镜像在工具中登录可能遇到的问题 首先是去docker官网下 docker for windows 官网&#xff1a; https://www.docker.com/get-started/ 如果Windows是专业版&#xff0…

QtC++与QTreeView详解

介绍 QTreeView 是 Qt 框架中的一个视图控件&#xff0c;用于显示树形结构的数据。它是 QAbstractItemView 类的子类&#xff0c;通常与数据模型结合使用。以下是 QTreeView 的详细讲解和在 Qt 中的作用&#xff1a; QTreeView 的作用&#xff1a; 显示层次数据&#xff1a; …

LeetCode Hot之七:438. 找到字符串中所有字母异位词

题目&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 示例 1: 输入: s “cbaebabacd”,…

算法通关村第十五关白银挑战——海量数据场景下的热门算法题

大家好&#xff0c;我是怒码少年小码。 最近超级忙&#xff0c;很多实验报告&#xff0c;已经四五天没搞了&#xff0c;但是我还是回来了&#xff01; 海量数据场景下的热门算法题 本篇的题目不要求写代码&#xff0c;面试的时候能很清楚的说出思路就可以了。 1. 从40个亿中…

spring 整合 JUnit

大家好&#xff0c;本篇博客我们通过spring来整合JUnitt单元测试框架。 在之前篇章的测试方法中&#xff0c;几乎都能看到以下的两行代码&#xff1a; ApplicationContext context new ClassPathXmlApplicationContext("xxx.xml"); Xxxx xxx context.getBean(Xxx…