#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int Status;
typedef int Elemtype;
typedef struct StackNode
{
Elemtype data;
struct StackNode* next;
}StackNode, * Linklist;
Status InitStack(Linklist& S);//初始化链栈
Status CreateStack(Linklist& S, int len);//创建链栈
Status PushStack(Linklist& S, Elemtype e);//入链栈
Status PopStack(Linklist& S, Elemtype& e);//出链栈
Status GetStack(Linklist S);//取出链栈的栈顶元素
Status LenStack(Linklist S);//求取链栈的长度
Status PrintStack_1(Linklist S);//逆序打印链栈
Status PrintStack_2(Linklist S);//正序打印链栈
int main(void)
{
Linklist S;
S = NULL;
int e;
int k;
int len;
do {
cout << "\n*****链栈相关操作*****";
cout << "\n1.初始化一个空链栈";
cout << "\n2.随机创建一个包含正整数值的链栈";
cout << "\n3.将一个数e插入到链栈栈顶";
cout << "\n4.将链栈栈顶元素弹出,并输出元素的值";
cout << "\n5.获取链栈栈顶元素";
cout << "\n6.求链栈的长度";
cout << "\n7.输出链栈从栈顶到栈底的元素";
cout << "\n8.输出链栈从栈底到栈顶的元素";
cout << "\n0.结束相关操作";
cout << "\n输入想要进行相关操作的序号:";
cin >> k;
switch (k)
{
case 1:
{
if (InitStack(S))
cout << "初始化成功。\n" << endl;
else
cout << "初始化失败。\n" << endl;
break;
}
case 2:
{
cout << "输入想要创建链栈的长度:";
cin >> len;
if (CreateStack(S,len))
{
cout << "创建成功。\n";
}
else
{
cout << "创建失败。\n";
}
break;
}
case 3:
{
cout << "输入想要插入元素的数值x为:";
cin >> e;
if (PushStack(S, e)) cout << "插入成功。\n";
else cout << "插入失败。\n";
break;
}
case 4:
{
if (PopStack(S,e)) cout << "删除成功。\n";
else cout << "删除失败。\n";
break;
}
case 5:
{
if (GetStack(S)) cout << "输出成功。\n";
else cout << "输出失败。\n";
break;
}
case 6:
{
if (LenStack(S)) cout << "长度获取成功。\n";
else cout << "长度获取失败。\n";
break;
}
case 7:
{
if (PrintStack_1(S)) cout << "全部输出成功。\n";
else cout << "全部输出失败。\n";
break;
}
case 8:
{
if (PrintStack_2(S)) cout << "全部输出成功。\n";
else cout << "全部输出失败。\n";
break;
}
}
} while (k != 0);
return OK;
}
Status InitStack(Linklist& S)//初始化链栈
{
S = NULL;
return OK;
}
Status CreateStack(Linklist& S, int len)//创建链栈
{
StackNode* p;
int e;
cout << "\n输入想要创建链栈的数据:";
for (int i = 0; i < len; i++)
{
p = new StackNode;
cin >> e;
p->data = e;
p->next = S;
S = p;
}
return OK;
}
Status PushStack(Linklist& S, Elemtype e)//入链栈
{
StackNode* p;
p = new StackNode;
p->data = e;
p->next = S;
S = p;
return OK;
}
Status PopStack(Linklist& S, Elemtype& e)//出链栈
{
if (S == NULL) return ERROR;
StackNode* p;
p = new StackNode;
e = S->data;
p = S;
S = S->next;
delete p;
cout << "出链栈的元素为:" << e << endl;
return OK;
}
Status GetStack(Linklist S)//取出链栈的栈顶元素
{
if (S->next == NULL) return ERROR;
cout << "取出链栈的栈顶元素为:" << S->data << endl;
return OK;
}
Status LenStack(Linklist S)
{
StackNode* p;
p = new StackNode;
p = S;
int len = 0;
while (p)
{
p = p->next;
len++;
}
cout << "链栈的长度为:" << len << endl;
return OK;
}
Status PrintStack_1(Linklist S)//打印链栈
{
if (S == NULL)
{
cout << "链栈为空。" << endl;
}
cout << "链栈中的元素有:";
StackNode* p;
p = S;
while (p!=NULL)
{
cout << p->data << " ";
p = p->next;
}
return OK;
}
Status PrintStack_2(Linklist S)//递归实现正序打印链栈
{
if (S == NULL)
{
cout << "链栈为空。" << endl;

return ERROR;
}
if (S->next == NULL)
{
cout << "链栈中的元素有:";
cout << S->data << " ";
return OK;
}
PrintStack_2(S->next);
cout << S->data << " ";
}

C++实现链栈相关操作代码的更多相关文章

  1. java虚拟机栈 相关操作

    针对JVM虚拟栈 和栈帧的操作 虚拟机栈: 栈元素是栈帧.方法调用,栈帧入栈,反之出栈. 栈帧:一个方法的运行空间. 1.局部变量表:方法定义的局部变量.方法的参数存在该表. 实例方法中有个隐含参数“ ...

  2. java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作

    项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...

  3. 数据结构 - 链栈的实行(C语言)

    数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...

  4. 利用JAVA API远程进行HDFS的相关操作

    学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...

  5. C语言实现链栈的初始化&进栈&出栈&读取栈顶元素

    /*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...

  6. c/c++ 链栈

    c/c++ 链栈 链栈 下面的代码实现了以下功能 函数 功能描述 push 压入 pop 弹出 show_list 打印 clear 释放所有内存空间 destroy 释放所有内存空间 nodesta ...

  7. HDFS文件目录操作代码

    分布式文件系统HDFS中对文件/目录的相关操作代码,整理了一下,大概包括以下部分: 文件夹的新建.删除.重命名 文件夹中子文件和目录的统计 文件的新建及显示文件内容 文件在local和remote间的 ...

  8. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  9. 42 github 开源代码 ——README.md语法/相关操作等

    0 引言 最近在github上开源了pro/E二次开发的代码,发现README.md的编辑方式很有趣,需要稍微了解一下. 1 markdown语法 参考了两篇博客的内容,链接如下. https://b ...

  10. linux下进程相关操作

    一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的 ...

随机推荐

  1. 学习.NET MAUI Blazor(三)、创建.NET MAUI Blazor应用并使用AntDesignBlazor

    大致了解了Blazor和MAUI之后,尝试创建一个.NET MAUI Blazor应用. 需要注意的是: 虽然都叫MAUI,但.NET MAUI与.NET MAUI Blazor 并不相同,MAUI还 ...

  2. 解决多次重连rabbitMQ失败

    项目中有用到rabbitMQ,但由于防火墙原因只有在SIT环境下才能连上rabbitMQ,在本地是无法连上rabbitMQ的.如下: 为了不影响调试,临时解决方法为禁止rabbitMQ打印日志.在lo ...

  3. [编程基础] Python配置文件读取库ConfigParser总结

    Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件. 文章目录 1 介绍 1.1 Python ConfigParser读取文件 1.2 Py ...

  4. 迁移学习(JDDA) 《Joint domain alignment and discriminative feature learning for unsupervised deep domain adaptation》

    论文信息 论文标题:Joint domain alignment and discriminative feature learning for unsupervised deep domain ad ...

  5. (转载)零日攻击(Zero-Day Attacks)

    零日攻击是网络安全行业中十分常见的攻击方式之一,其具有很大的突发性与破坏性,那么零日攻击是什么?如何防范零日攻击?以下是详细的内容介绍. 零日攻击是什么? 零日漏洞或零时差漏洞通常是指还没有补丁的安全 ...

  6. Java后台如何接收与处理JSON类型数据

    项目开发中偶尔会使用到某个为JSON类型的字段,一个字段中又包含多个其他的字段. 这种设计方式是根据实际需要来进行处理的,比如规则可能包含多条,每一条规则又包含 多个字段:再比如一些特殊的应用场景如标 ...

  7. 练习_使用递归计算1-n之间的和-练习_使用递归计算阶乘

    练习_使用递归计算1-n之间的和 定义一个方法,使用递归计算1-n之间的和 1+2+3+. . .+n n+(n-1)+(n-2)+...+1 已知: 最大值:n 最小值:1 使用递归必须明确: 1. ...

  8. 【大型软件开发】浅谈大型Qt软件开发(四)动态链接库的宏冲突问题、COM组件开发的常见问题

    最近工作的时候有一个链接库的对接工作,在对接时发生了一些小问题,这篇FAQ是办公室写这个库的工程师戴工写的,这里记录一下: 一.编译工程时报链接错误"不允许dllimport静态数据成员的定 ...

  9. echarts入门到应用学习笔记

    背景: 做疫情数据管理可视化,需要用到热点图在web端进行数据可视化,而地图就是必不可少的一个,看完文档,可以解决大部分小白的问题,保姆级攻略,即使你的js,这些学得不咋样(我就是小菜鸟) 步骤 环境 ...

  10. Python学习常见问题及其解决方案(1)

    1.ModuleNotFoundError: No module named 'urllib2' 解决方案: 1)https://blog.csdn.net/weixin_45598506/artic ...