首页 > 其他分享 >顺序栈和链栈的部分功能完整代码

顺序栈和链栈的部分功能完整代码

时间:2024-04-07 14:58:59浏览次数:27  
标签:Status case 顺序 return cout ElemType 代码 链栈 OK

一、顺序栈代码

#include<iostream>
#include<stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
typedef struct 
{
    ElemType *elem;
    int top;
}Sqstack;
Status InitStack(Sqstack &S);
Status Push(Sqstack &S,ElemType e);
Status Pop(Sqstack &S,ElemType &e);
Status GetPop(Sqstack S,ElemType &e);
Status StackEmpty(Sqstack S);
void Show(Sqstack S);
//初始化
Status InitStack(Sqstack &S)
{
    S.elem=new ElemType[MAXSIZE];
    if(!S.elem) return ERROR;
    S.top =-1;
    return OK;
 } 
//入栈
Status Push(Sqstack &S,ElemType e)
{
    if(S.top ==MAXSIZE-1)  return ERROR;
    S.top++;
    S.elem[S.top]=e;
    return OK; 
 } 
//出栈
Status Pop(Sqstack &S,ElemType &e)
{
    if(S.top==-1) return ERROR;
    e=S.elem[S.top];
    S.top--;
    return OK;

//取栈顶元素
Status GetPop(Sqstack S,ElemType &e)
{
    if(S.top==-1) return ERROR;
    e=S.elem [S.top];
    return OK;
 } 
//判断栈是否为空 
Status StackEmpty(Sqstack S)
{
    if(S.top==-1)
    return OK;
    else
    return ERROR;
}
//输出元素
void Show(Sqstack S)
{
    if(S.top==-1)
    {
        cout<<"没有数据"<<endl;
        return ;
    }
    while(S.top!=-1)
    {
        cout<<S.elem[S.top]<<" ";
        S.top--;
    }
    cout<<endl;
 } 

int main()
{
    Sqstack S;
    ElemType e;
    int choice;
    while(1)
    {
        cout<<"1、初始化  2、入栈  3、出栈  4、显示"<<endl;
        cout<<"5、判断栈空  6、取栈顶元素  0、退出"<<endl;
        cout<<"输入选项=";
        cin>>choice;
        switch(choice)
        {
        case 1:
            InitStack(S);
            cout<<"初始化成功!"<<endl;
            break;
        case 2:
            cout<<"入栈数据=";
            cin>>e;
            if(Push(S,e)==OK)
            cout<<"输入成功!"<<endl;
            else 
            cout<<"输入失败!"<<endl;
            break;
        case 3:
               if(Pop(S,e)==OK)
               {
                   cout<<"出栈成功!"<<endl;
                   cout<<"出栈数据="<<e<<endl;
               }
            else
            cout<<"出栈失败!"<<endl;
            break;
        case 4:
            Show(S);
            break;
        case 5:
             if(StackEmpty(S)==OK)
                 cout<<"栈空!"<<endl;
            else 
                cout<<"栈非空!"<<endl;
            Show(S);
            break;
        case 6:
            if(GetPop(S,e)==OK)
            {
                cout<<"栈顶元素="<<e<<endl; 
            }
            else
            cout<<"栈空!"<<endl;
            break;
        case 0:
            return 0;
        default:
            cout<<"选项输入错误!"<<endl;
        } 
        system("pause");
        system("cls");
    }
    return 0;
}

二、链栈代码

#include<iostream>
#include<stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
//定义存储结构 
typedef struct Node
{
    ElemType data;
    struct Node *next;
}StackNode,*LinkStack;
Status Initstack(LinkStack &S);
Status Push(LinkStack &S,ElemType e);
Status Pop(LinkStack &S,ElemType &e);
Status GetPop(LinkStack S,ElemType &e);
Status StackEmpty(LinkStack S);
void Show(LinkStack S);
//初始化
Status Initstack(LinkStack &S)
{
    S=NULL;
    return OK;
 } 
//入栈(头插法) 
Status Push(LinkStack &S,ElemType e)
{
    StackNode *p;
    p=new StackNode ;
    if(!p) return ERROR;
    p->data=e;
    p->next=S;
    S=p;
    return OK;
 } 
//出栈 
Status Pop(LinkStack &S,ElemType &e)
{
    StackNode *p;
    if(S==NULL) return ERROR;
    e=S->data;
    p=S;
    S=S->next;
    delete p;
    return OK;
}
//取栈顶元素 
Status GetPop(LinkStack S,ElemType &e)
{
    if(S==NULL) return ERROR;
    e=S->data;
    return OK;
}
//判断栈是否为空 
Status StackEmpty(LinkStack S)
{
    if(S==NULL)
    return OK;
    else 
    return ERROR;
}
//输出函数 
void Show(LinkStack S)
{
    StackNode *p;
    p=S;
    if(S==NULL) 
    {
        cout<<"没有数据!"<<endl;
        return ;
    }
    while(p)
    {
    cout<<p->data<<" ";
    p=p->next;
    }
    cout<<endl;
}
int main()
{
    LinkStack S;
    ElemType e;
    int choice;
    while(1)
    {
        cout<<"1、初始化  2、入栈  3、出栈  4、显示"<<endl;
        cout<<"5、判断栈空  6、取栈顶元素  0、退出"<<endl;
        cout<<"输入选项=";
        cin>>choice;
        switch(choice)
        {
        case 1:
            Initstack(S);
            cout<<"初始化成功!"<<endl;
            break;
        case 2:
            cout<<"入栈数据=";
            cin>>e;
            if(Push(S,e)==OK)
            cout<<"输入成功!"<<endl;
            else 
            cout<<"输入失败!"<<endl;
            break;
        case 3:
               if(Pop(S,e)==OK)
               {
                   cout<<"出栈成功!"<<endl;
                   cout<<"出栈数据="<<e<<endl;
               }
            else
            cout<<"出栈失败!"<<endl;
            break;
        case 4:
            Show(S);
            break;
        case 5:
             if(StackEmpty(S)==OK)
                 cout<<"栈空!"<<endl;
            else 
                cout<<"栈非空!"<<endl;
            Show(S);
            break;
        case 6:
            if(GetPop(S,e)==OK)
            {
                cout<<"栈顶元素="<<e<<endl; 
            }
            else
            cout<<"栈空!"<<endl;
            break;
        case 0:
            return 0;
        default:
            cout<<"选项输入错误!"<<endl;
        } 
        system("pause");
        system("cls");
    }
    return 0;
}
 

标签:Status,case,顺序,return,cout,ElemType,代码,链栈,OK
From: https://blog.csdn.net/2301_80750659/article/details/137430903

相关文章

  • 18天【代码随想录算法训练营34期】● 513.找树左下角的值 ● 112. 路径总和 113.路径
    513.找树左下角的值#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:deffindBottomLeftValue(self......
  • 1600. 王位继承顺序
    题面核心思想纯模拟!没反应过来是前序遍历~privateMap<String,List<String>>children;表示一个人的孩子当调用getInheritanceOrder时通过map搜索答案,由于孩子也有可能有孩子,无限套娃,所以通过递归搜索建立答案。建立答案的时候也不用考虑是否死亡,我们搜索完成后在去删除......
  • SAP 零代码完成批量导入功能
    最近项目被流程给烦的不行不行的,现在只要动代码就要走流程,走预算,是不是甲方都这样,我在Miniso怎没这样的感觉.所以发现认识逼出来,没有这样条条框框也就不会想更好解决办法,今天介绍一种小白导数据的办法,不需要代码经验,只要点三个按钮就能导入数据。              ......
  • 保护你的 Java 代码:深入了解代码混淆
    在当今数字化时代,软件开发领域竞争激烈,而保护你的代码免受恶意攻击和盗用是至关重要的。代码混淆是一种常用的技术,用于增加攻击者分析和逆向工程代码的难度,从而提高代码的安全性。本文将介绍代码混淆的基本概念和详细办法,帮助你保护Java代码的安全性。1.代码混淆简介代码......
  • 【C语言】顺序表(原理+实现)
    一.原理1.线性表、顺序表线性表(Linearlist)是n个具有相同特性的数据元素的有限序列。线性表在逻辑上是线性结构,就如同一条连续的直线,但是在物理结构上不一定是连续的。顺序表(Sequencelist)是线性表的一种,但顺序表不仅在逻辑上是线性的,它在物理上同样是线性的。顺序表的底层......
  • java代码混淆,保护源码的重要性
    Java代码混淆是一种重要的安全措施,用于保护Java应用程序的源代码免受恶意攻击和逆向工程的影响。下面是关于Java代码混淆以及保护源码重要性的详细说明:1.什么是Java代码混淆?Java代码混淆是指通过对Java代码进行一系列的转换和优化,使得源代码变得难以理解和分析,从而增加攻击......
  • 代码手术刀—自定义你的代码重构工具
    前言笔者近日在做代码仓库的存量代码缩减工作,首先考虑的是基于静态扫描的缩减,尝试使用了很多工具来对代码进行优化,例如PMD、IDEA自带的inspect功能、findBugs等。但是无一例外,要么过于“保守”,只给出扫描结果,但是无法实现一键优化,要么直接就是有bug(这里特指IDEA2023.1.5专业版-in......
  • 简单顺序链- - 将第一个链的输出作为第二个链的输入
    fromlangchain.chainsimportLLMChain,SimpleSequentialChain#简单序列链fromlangchain_community.llms.ollamaimportOllamafromlangchain_core.promptsimportPromptTemplatellm=Ollama(model="qwen:7b")template="""您的工作是根据用户建议的区域制......
  • Java毕业设计-基于springboot开发的IT技术交流和分享平台设计与实现-毕业论文(附毕设源
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构三、系统实现展示1、用户功能模块的实现1.1用户注册界面1.2用户登录界面1.3笔记分享详情界面1.4添加笔记分享界面1.5我的收藏界面2、管理员功能模块的实现2.1管理员登......
  • Java毕业设计-基于springboot开发的javaEE校园二手书交易平台设计与实现-毕业论文(附毕
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构三、系统实现展示1、用户信息管理2、图书类型管理3、图书信息管理4、公告信息管理四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的javaEE校园二手......