Stack数据结构设计模板

第三章

栈、队列、数组
1.栈

1.1 顺序栈

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#define MaxSize 20
typedef int ElemType;
//顺序栈的定义
typedef struct {
   ElemType data[MaxSize];
   int top;
}SqStack;
// 初始化顺序栈
void InitSqStack(SqStack &S){
   S.top = -1;
};
// 入栈(增)
bool Push(SqStack &S,ElemType x){
   if(S.top == MaxSize-1)
       return false;//栈已满
   S.data[++S.top] = x;
   return true;
}
// 出栈(删)
bool Pop(SqStack&S,ElemType &x){
   if(top==-1) 
       return false;//栈为空
   x = S.data[S.top--];
   return true;
}
// 取栈顶
bool GetTop(SqStack S,ElemType &x){
   if(S.top==-1)
       return false;//栈空
   x = S.data[S.top];
   return true;
}
// 栈判空
bool IsEmpty(SqStack &s){
   return S.top==-1? true:false;
}
// 清空栈(逻辑清空)

void DestroyStack(SqStack&S){
   S.top=-1;
}
// 判满
bool IsFull(SqStack&S){
   //注意:判满的条件可能不同,请根据题意要求设计
   if(S.top==MaxSize-1)return true;
   return false;
}

1.2链栈

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

typedef  int ElemType ;
//链栈的定义(本质上就是单链表,只是所有的操作都限制在表头进行)
typedef struct Stack{
    ElemType data;
    struct Stack *next;
} liStack ,*LiStack;

// 初始化

// 带头结点的链栈
bool InitLiStack(LiStack&S){
    S = new liStack;
    if(S==nullptr)
        return false;
    S->next = nullptr;
    return true;
}
//不带头结点的链栈
bool InitLiStack2(LiStack &S){
    S  = nullptr;
    return true;
}
void Push(LiStack &S, ElemType x) {
    
    LiStack t = new Stack;
    if (!t) {
        std::cerr << "Memory allocation failed for new stack node." << std::endl;
        return;
    }
    t->data = x;
    t->next = S->next;
    S->next = t;
}

//入栈(不带头结点)
void Push2(LiStack&S,ElemType x){
	//cout<<"insert ele:"<<x<<endl; //ouput Debug
    liStack*t = new liStack;
    t->data = x;
    t->next = S;
    S = t;
}
// 出栈
bool Pop(LiStack&S,ElemType &x){
    if(!S->next)
        return false;
    liStack*q = S->next;
    x = q->data;
    S->next = q->next;
    delete q;
    return true;
}
// 出栈(不带头节点)

bool Pop2(LiStack&S,ElemType &x){
    if(S==nullptr)
        return false;
    liStack*q = S;
    x = q->data;
    S = q->next;
    delete q;
    return true;
}

// 取栈顶(带头结点)
bool GetTop(LiStack S,ElemType &x){
    if(S->next==nullptr)
        return false;
    x = S->next->data;
    return true;
}
// 取栈顶(不带头结点)
bool GetTop2(LiStack S ,ElemType &x){
    if(S==nullptr)
        return false;
    x = S->data;
    return true;
}

//工具函数(生成随机数)
int MyRandom(int low,int high) {
    // 创建一个随机数引擎
    std::random_device rd;
    std::mt19937 gen(rd()); // 使用 Mersenne Twister 引擎

    // 定义随机数分布
    std::uniform_int_distribution<> dis(low, high); // 生成范围在 [1, 100] 内的整数
    // 生成随机数
    int random_number = dis(gen);
    return random_number;
}
void print(LiStack&S){
	liStack* p = S;
	while(p){
		cout<<p->data<<"->";
		p = p->next;
	}
	cout<<"NULL"<<endl;
}
	while(p){
		cout<<p->data<<"->";
		p = p->next;
	}
	cout<<"NULL"<<endl;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/600936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

推荐5个免费的国内平替版GPT

提起AI&#xff0c;大家第一个想到的就是GPT。 虽然它确实很厉害&#xff0c;但奈何于我们水土不服&#xff0c;使用门槛有些高。 不过随着GPT的爆火&#xff0c;现在AI智能工具已经遍布到各行各业了&#xff0c;随着时间的推移&#xff0c;国内的AI工具也已经“百花盛放”了…

【R语言从0到精通】-4-回归建模

通过之前的文章&#xff0c;我们已经基本掌握了R语言的基本使用方法&#xff0c;那从本次教程开始&#xff0c;我们开始聚焦如何使用R语言进行回归建模。 4.1 回归简介 回归分析是一种统计学方法&#xff0c;用于研究两个或多个变量之间的相互关系和依赖程度。它可以帮助我们了…

Java性能优化(一):Java基础-ArrayList和LinkedList

引言 集合作为一种存储数据的容器&#xff0c;是我们日常开发中使用最频繁的对象类型之一。JDK为开发者提供了一系列的集合类型&#xff0c;这些集合类型使用不同的数据结构来实现。因此&#xff0c;不同的集合类型&#xff0c;使用场景也不同。 很多同学在面试的时候&#x…

数控六面钻适用场景-不止家具制造

在快节奏的现代生活中&#xff0c;家具作为我们生活的重要组成部分&#xff0c;其美观度和实用性日益受到人们的关注。而在这背后&#xff0c;一个不可或缺的“工匠”正默默地发挥着它的作用——那就是数控六面钻。 数控六面钻&#xff0c;顾名思义&#xff0c;是一种高度自动…

OS复习笔记ch5-2

引言 在上一篇笔记中&#xff0c;我们介绍到了进程同步和进程互斥&#xff0c;以及用硬件层面上的三种方法分别实现进程互斥。其实&#xff0c;软件层面上也有四种方法&#xff0c;但是这些方法大部分都存在着一些问题&#xff1a; “上锁”与“检查”是非原子操作&#xff0…

error: pathspec ‘XXX‘ did not match any file(s) known to git

使用vscode&#xff0c;在本地开发切换分支时&#xff0c;报以下错误&#xff1a; error: pathspec XXX did not match any file(s) known to git 该问题是由于没有对应分支的原因。 首先使用一下命令&#xff0c;查看本地及远程的所有分支。 git branch -a 若没有对应的分…

47.Redis学习笔记

小林coding -> 图解redis的学习笔记 文章目录 Rediswindwos安装docker安装redis启动redis使用RDM访问虚拟机中的redispython连接redis缓存穿透、击穿、雪崩基本数据类型高级数据类型高并发指标布隆过滤器分布式锁Redis 的有序集合底层为什么要用跳表&#xff0c;而不用平衡…

谷歌推出10门免费AI课程,无需教科书及费用

谷歌面向小白以及开发者分别推出了不同的AI课程~ 包含初级、中级和高级。课程章节大致包括&#xff1a;&#xff08;含教学视频、参考材料、测验&#xff09; 基础入门&#xff1a;45分钟深入了解生成式AI 简单实操&#xff1a;30分钟掌握大语言模型 了解如何释放生成式 AI S…

基于小程序实现的投票评选系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

CSS选择器(基本+复合+伪类)

目录 CSS选择器 基本选择器 标签选择器&#xff1a;使用标签名作为选择器->选中同名标签设置样式 类选择器&#xff1a;给类选择器定义一个名字.类名&#xff0c;并给标签添加class"类名" id选择器&#xff1a;跟类选择器非常相似&#xff0c;给id选择器定义…

数据库数据恢复—SQL Server数据库ndf文件变为0KB的数据恢复案例

SQL Server数据库故障&#xff1a; 存储设备损坏导致存储中SQL Server数据库崩溃。对数据库文件进行恢复后&#xff0c;用户发现有4个ndf文件的大小变为0KB。该SQL Server数据库每10天生成一个大小相同的NDF文件&#xff0c;该SQL Server数据库包含两个LDF文件。 SQL Server数据…

Node.js里面 Path 模块的介绍和使用

Node.js path 模块提供了一些用于处理文件路径的小工具&#xff0c;我们可以通过以下方式引入该模块&#xff1a; var path require("path") 方法描述 序号方法 & 描述1path.normalize(p) 规范化路径&#xff0c;注意.. 和 .。2path.join([path1][, path2][,…

将矩阵按对角线排序(Lc1329)——排序

矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线&#xff0c;沿右下方向一直到矩阵末尾的元素。例如&#xff0c;矩阵 mat 有 6 行 3 列&#xff0c;从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。 给你一个 m * n 的整…

Vue创建todolist

电子书 第三章&#xff1a; https://www.dedao.cn/ebook/reader?idV5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO 没有使用VUE CLI创建项目。 创建步骤&#xff1a; 1&#xff0c; 用Vite 创建项目 2&#xff0c; npm run dev 运行程序 参照之前的文…

[Kubernetes] Rancher 2.7.5 部署 k8s

server: 192.168.66.100 master: 192.168.66.101 node1: 192.168.66.102 文章目录 1.rancher server 安装docker2.部署k8s3.kubeconfig 1.rancher server 安装docker 所有主机开通ipv4 vi /etc/sysctl.conf#加入 net.ipv4.ip_forward 1#配置生效 sysctl -prancher-server开通…

k8s部署Kubeflow v1.7.0

文章目录 环境介绍部署访问kubeflow ui问题记录 环境介绍 K8S版本&#xff1a;v1.23.17&#xff0c;需要配置默认的sc 参考&#xff1a;https://github.com/kubeflow/manifests/tree/v1.7.0 部署 #获取安装包 wget https://github.com/kubeflow/manifests/archive/refs/tag…

【Redis分布式缓存】分片集群

Redis 分片集群 搭建分片集群 集群结构 分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 这里我们会在同一台虚拟机中开启6个redis实例&…

学QT的第二天~

小黑子鉴别界面 #include "mywidget.h" void MyWidget::bth1() { if(edit3 ->text()"520cxk"&&edit4 ->text()"1314520") { qDebug()<< "你好&#xff0c;真爱粉"; this->close(); } else { speecher->sa…

微信公众号营销攻略,2024年微信引流商业最佳实践

确实&#xff0c;微信是中国市场上不可或缺的营销工具。下面是一些关于如何在微信上进行有效营销的最佳实践&#xff0c;以及如何通过微信公众号进行广告宣传&#xff0c;以提升品牌知名度并推动业务增长。 拥有一个微信公众号是进行微信营销的关键第一步。 通过公众号&#x…

设计模式学习笔记 - 回顾总结:在实际软件开发中常用的设计思想、原则和模式

概述 本章&#xff0c;先来回顾下整个专栏的知识体系&#xff0c;主要包括面向对象、设计原则、编码规范、重构技巧、设计模式五个部分。 面向对象 相对于面向过程、函数式编程&#xff0c;面向对象是现在最主流的编程范式。纯面向过程的编程方法&#xff0c;现在已经不多见了…