数据结构(c语言版) 栈

顺序栈

要求:实现顺序栈的入栈,出栈,显示栈

代码

#include <stdio.h>
#define MAXSIZE 100struct liststack{int data[MAXSIZE];int top;
};//初始化栈
void init(struct liststack * LS){LS->top = -1;
}//入栈操作
void instack(struct liststack * LS, int value){//判断是否栈满if(LS->top == (MAXSIZE-1)){printf("入栈失败:栈满!\n");return;}//入栈LS->top ++;LS->data[LS->top] = value;printf("数据 %d 入栈成功,在第 %d 位\n", value, LS->top+1);
}//出栈操作
void outstack(struct liststack * LS){//判断是否栈空if(LS->top == -1){printf("出栈失败:栈空!\n");return;}//出栈printf("第 %d 位数据为 %d 出栈成功!\n",LS->top+1 , LS->data[LS->top]);LS->top --;
}//显示栈的数据
void isstack(struct liststack * LS){//判断是否栈空if(LS->top == -1){printf("显示栈失败:栈空!\n");return;}int index = LS->top;while(index != -1){printf("第 %d 位数据是 %d \n",index + 1, LS->data[index]);index --;}
}//判断栈
int emptystack(struct liststack * LS){if(LS->top == -1){printf("栈为空栈\n");return 1;}if(LS->top == (MAXSIZE-1)){printf("栈为满栈\n");return 0;}printf("既不是空栈,也不是满栈\n");return 2;}int main(){struct liststack LS;init(&LS);printf("****************入栈操作****************\n");int value;printf("请输入入栈的数据(输入0则结束):");scanf("%d", &value);while (value != 0){instack(&LS, value);printf("请输入入栈的数据(输入0则结束):");scanf("%d", &value);}printf("\n****************显示栈中数据****************\n");isstack(&LS);printf("\n****************出栈操作****************\n");int flag;printf("出栈请输入1,结束请输入0:");scanf("%d", &flag);while (1){if(flag == 1){outstack(&LS);}if(flag == 0){break;}printf("出栈请输入1,结束请输入0:");scanf("%d", &flag);}printf("\n****************显示栈中数据****************\n");isstack(&LS);printf("\n****************判断栈****************\n");emptystack(&LS);
}

运行结果

****************入栈操作****************
请输入入栈的数据(输入0则结束):10
数据 10 入栈成功,在第 1 位
请输入入栈的数据(输入0则结束):20
数据 20 入栈成功,在第 2 位
请输入入栈的数据(输入0则结束):304
数据 304 入栈成功,在第 3 位
请输入入栈的数据(输入0则结束):450
数据 450 入栈成功,在第 4 位
请输入入栈的数据(输入0则结束):596
数据 596 入栈成功,在第 5 位
请输入入栈的数据(输入0则结束):0****************显示栈中数据****************5 位数据是 5964 位数据是 4503 位数据是 3042 位数据是 201 位数据是 10****************出栈操作****************
出栈请输入1,结束请输入015 位数据为 596 出栈成功!
出栈请输入1,结束请输入014 位数据为 450 出栈成功!
出栈请输入1,结束请输入00****************显示栈中数据****************3 位数据是 3042 位数据是 201 位数据是 10****************判断栈****************
既不是空栈,也不是满栈进程已结束,退出代码为 0

链栈

实现链栈的创建,入栈,出栈,显示栈

代码

#include <stdio.h>
#include <malloc.h>struct linkstack{int data;struct linkstack * next;
};//初始化栈
void init(struct linkstack * LS){LS->next = NULL;
}//判断栈
int emptystack(struct linkstack * LS){if(LS->next == NULL){printf("栈为空栈\n");return 0;}printf("栈不是空栈\n");return 1;
}//入栈  头插法
void instack(struct linkstack * LS, int value){if(LS == NULL){printf("栈不存在\n");return;}struct linkstack * NewNode = malloc(sizeof(struct linkstack));if(NewNode){NewNode->data = value;NewNode->next = LS->next;LS->next = NewNode;printf("数据 %d 入栈成功!\n", value);} else{printf("入栈失败!\n");}};//出栈
void outstack(struct linkstack * LS){if(LS->next == NULL){printf("出栈失败:栈为空!\n");}struct linkstack* temp = LS->next;LS->next = LS->next->next;printf("数据 %d 出栈成功!\n",temp->data);free(temp);
}//显示栈
void isstack(struct linkstack * LS){if(LS->next == NULL){printf("显示栈失败:栈为空!\n");}int top = 1;struct linkstack* temp = LS->next;while(temp != NULL){printf("距栈顶第 %d 位的数据是 %d \n",top, temp->data);top ++;temp = temp->next;}
}int main(){struct linkstack LS;init(&LS);printf("****************链栈入栈操作****************\n");int value;printf("请输入入栈的数据(输入0则结束):");scanf("%d", &value);while (value != 0){instack(&LS, value);printf("请输入入栈的数据(输入0则结束):");scanf("%d", &value);}printf("\n****************显示链栈中数据****************\n");isstack(&LS);printf("\n****************链栈出栈操作****************\n");int flag;printf("出栈请输入1,结束请输入0:");scanf("%d", &flag);while (1){if(flag == 1){outstack(&LS);}if(flag == 0){break;}printf("出栈请输入1,结束请输入0:");scanf("%d", &flag);}printf("\n****************显示链栈中数据****************\n");isstack(&LS);printf("\n****************判断链栈****************\n");emptystack(&LS);
}

运行结果

在这里插入图片描述

共享栈

要求:两栈共享技术

代码

#include <stdio.h>
#define MAXSIZE 100//声明结构体
struct DListStack{int data[MAXSIZE];int top[2];
};//初始化结构体
void init(struct DListStack* DLS){DLS->top[0] = -1;DLS->top[1] = MAXSIZE;
}//入栈
void inDLStack(struct DListStack* DLS, int value, int i){//判断是否满栈if(DLS->top[0]+1 == DLS->top[1]){printf("入栈失败:栈满\n");return;}//判断在第几个栈 入栈if(i == 0){DLS->top[0]++;DLS->data[DLS->top[0]] = value;printf("数据 %d 在共享栈的第左栈中第 %d 位入栈成功\n",value, DLS->top[0]+1);return;}if(i == 1){DLS->top[1]--;DLS->data[DLS->top[1]] = value;printf("数据 %d 在共享栈的右栈中第 %d 位入栈成功\n",value, DLS->top[1]+1);return;}printf("入栈失败\n");
}//出栈
void outDLStack(struct DListStack* DLS, int i){//判断是否满栈if(DLS->top[0] == -1 && DLS->top[1] == MAXSIZE){printf("出栈失败:两个栈都为空栈\n");return;}//判断在第几个栈 出栈if(i == 0){if(DLS->top[0] == -1){printf("出栈失败:左栈为空栈!\n");return;}printf("数据 %d 在共享栈的左栈中第 %d 位出栈成功\n",DLS->data[DLS->top[0]], DLS->top[0]+1);DLS->top[0]--;return;}if(i == 1){if(DLS->top[1] == -1){printf("出栈失败:右栈为空栈!\n");return;}printf("数据 %d 在共享栈的右栈中第 %d 位出栈成功\n",DLS->data[DLS->top[1]], DLS->top[1]+1);DLS->top[1]++;return;}printf("出栈失败\n");
}//显示栈
void isDLStack(struct DListStack* DLS){//判断是否满栈if(DLS->top[0] == -1 && DLS->top[1] == MAXSIZE){printf("显示栈失败:两个栈都为空栈\n");return;}//显示第一个栈int index_0 = DLS->top[0];if(index_0 == -1){printf("显示栈失败:左栈为空栈!\n");}while (index_0 != -1){printf("数据 %d 在共享栈的左栈中第 %d 位出栈成功\n",DLS->data[index_0], index_0+1);index_0 --;}//显示第er个栈int index_1 = DLS->top[1];if(index_1 == MAXSIZE){printf("显示栈失败:右栈为空栈!\n");}while (index_1 != MAXSIZE){printf("数据 %d 在共享栈的右栈中第 %d 位出栈成功\n",DLS->data[index_1], index_1+1);index_1 ++;}}int main(){struct DListStack DLS;init(&DLS);printf("********************入栈操作***********************\n");int value,index;printf("请输入入栈的值和左(0)栈或者右(1)栈,输入2 2则结束:");scanf("%d %d",&value, &index);while (1){if(index == 0){inDLStack(&DLS, value, 0);}if(index == 1){inDLStack(&DLS, value, 1);}if(index == 2){break;}printf("请输入入栈的值和左(0)栈或者右(1)栈,输入2 2则结束:");scanf("%d %d",&value, &index);}printf("\n********************显示栈操作***********************\n");isDLStack(&DLS);printf("\n********************出栈操作***********************\n");int flag;printf("出左栈则输入0,出右栈则输入1,结束则输入2:");scanf("%d", &flag);while (1){if(flag == 0){outDLStack(&DLS, 0);}if(flag == 1){outDLStack(&DLS, 1);}if(flag == 2){break;}printf("出左栈则输入0,出右栈则输入1,结束则输入2:");scanf("%d", &flag);}printf("\n********************显示栈操作***********************\n");isDLStack(&DLS);}

运行结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web3.0的测试题

任务&#xff1a; 在前端开发一个查询UI&#xff0c;查询当前用户账户的ETH余额和指定ERC20合约中的余额 目标&#xff1a; UI框架指定使用 MUI (https://mui.com)需要查询到当前账户的ETH余额并展示在UI界面上需要输入ERC20合约地址后&#xff0c;查询到到当前账户在此ERC20…

简述SVM

概述 SVM&#xff0c;即支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种常见的监督学习算法&#xff0c;用于分类和回归问题。它是一种基于统计学习理论和结构风险最小化原则的机器学习方法。 SVM的主要思想是在特征空间中找到一个最优的超平面…

怎么将pdf转换成word?

怎么将pdf转换成word&#xff1f;将pdf文件转换成word是一件非常重要的转换技能&#xff0c;将pdf转换成word可以解决非常多的问题&#xff0c;总结起来主要有以下这些&#xff1a;编辑文本&#xff1a;① PDF文件通常是不可编辑的&#xff0c;而将其转换为Word格式后&#xff…

微服务使用指南

微服务使用指南 1.初识微服务 微服务可以认为是一种分布式架构的解决方案&#xff0c;提供服务的独立性和完整性&#xff0c;做到服务的高内聚、低耦合。 目前服务架构主要包含&#xff1a;单体架构和分布式架构。 1.1 单体架构 单体架构&#xff1a;把所有业务功能模块都…

小程序day04

目标 自定义组件 创建组件 引用组件 局部引用 全局引用 组件的函数定义到metods节点中&#xff0c;梦回vue2. 样式 数据&#xff0c;方法&#xff0c;属性 下划线开头的称为自定义方法&#xff0c;非下划线开头的都是事件处理函数。 神特么&#xff0c;this.datathis.pro…

Databend 开源周报第 118 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 MERGE INTO 现已…

Elasticsearch内存分析

文章目录 Elasticsearch JVM内存由哪些部分组成Indexing BufferNode Query CacheShard Request CacheField Data CacheSegments Cache查询 非堆内存内存压力mat分析es的jvm缓存监控 Elasticsearch JVM内存由哪些部分组成 官方建议Elasticsearch设置堆内存为32G&#xff0c;因为…

Chrome 插件开发 V3版本 跨域处理

插件构成 chrome 插件通常由以下几部分组成&#xff1a; manifest.json&#xff1a;相当于插件的 meta 信息&#xff0c;包含插件的名称、版本号、图标、脚本文件名称等&#xff0c;这个文件是每个插件都必须提供的&#xff0c;其他几部分都是可选的。 background script&…

【大数据】NiFi 中的重要术语

NiFi 中的重要术语 1.Flow Controller2.Processor3.Connection4.Controller Service5.Process Group6.FlowFile 那些一个个黑匣子称为 Processor&#xff0c;它们通过称为 Connection 的队列交换名为 FlowFile 的信息块。最后&#xff0c;FlowFile Controller 负责管理这些组件…

服务器代码上云过程

一、前置要求 1.1 服务器端代码 需要有服务器端的代码&#xff0c;不然在云服务器&#xff08;云主机&#xff09;上运行啥嘞 1.2 云服务器&#xff08;云主机&#xff09; 需要有云服务器&#xff0c;因为云服务器会有公网IP&#xff0c;可以在任意地方进行访问。云服务器…

Visual Studio Code将中文写入变量时,中文老是乱码问题

对于这个问题&#xff0c;我也是弄了很久才知道&#xff0c;编码格式的问题 在此之前我们要先下载个插件 照这以上步骤&#xff0c;最后按F6运行即可&#xff0c;按F6是利用我们刚刚下载的插件进行编译&#xff0c;唯一有一点不好就是&#xff0c;用这种插件运行的话&#xff…

App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法

根据近日工业和信息化部发布的《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;相信不少要进行IOS平台App备案的朋友遇到了一个问题&#xff0c;就是apple不提供云管理式证书的下载&#xff0c;也就无法获取公钥及证书SHA-1指纹。 已经上架的应用不想重…

java项目之个人健康信息管理(ssm+jsp)

项目简介 个人健康信息管理实现了以下功能&#xff1a; 管理员&#xff1a;首页、个人中心、用户管理、医师管理、饮食记录管理、运动记录管理、健康信息管理、健康评估管理、健康知识管理、系统管理。用户&#xff1a;首页、个人中心、饮食记录管理、运动记录管理、健康信息…

京东数据分析(京东销量):2023年9月京东投影机行业品牌销售排行榜

鲸参谋监测的京东平台9月份投影机市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台的相关数据数据显示&#xff0c;9月份&#xff0c;京东平台投影机的销量为13万&#xff0c;环比下滑约17%&#xff0c;同比下滑约25%&#xff1b;销售额将近2.6亿&#xff0c;环比下…

助力工业数字化!TDengine 与恩菲 MIM+ 工业互联网平台实现兼容性互认

在云计算、物联网、5G等新兴技术快速发展的当下&#xff0c;制造企业想要运用新兴技术实现数字化转型&#xff0c;工业互联网平台的应用和打造是非常关键的转型要素。在工业互联网平台的发展中&#xff0c;数据处理上存在的问题一直都是令企业所头疼的&#xff0c;越来越多的案…

Vue3:自定义图标选择器(包含 SVG 图标封装)

文章目录 一、准备工作&#xff08;在 Vue3 中使用 SVG&#xff09;二、封装 SVG三、封装图标选择器四、Demo 效果预览&#xff1a; 一、准备工作&#xff08;在 Vue3 中使用 SVG&#xff09; 本文参考&#xff1a;https://blog.csdn.net/houtengyang/article/details/1290431…

后端工程化 | SpringBoot 知识点

文章目录 [SpringBoot] 后端工程化1 需求2 开发流程3 RequestController 类&#xff08;操作类&#xff09;3.1 简单参数&#xff08;形参名和请求参数名一致&#xff09;3.2 简单参数&#xff08;形参名和请求参数名不一致&#xff09;3.3 复杂实体参数3.4 数组参数3.5 集合参…

chrome安装vue devtools

不能访问应用商店 如果可以访问应用商店可以往下看 插件源代码 选择shell-chrome&#xff0c;这是官方的插件源码 下载源代码打包 参考教程 点击扩展按钮->管理扩展程序->打开开发者模式->把crx文件拖拽进去即可 可以访问chrome应用商店 插件地址 官方文档地址 选…

PolarDB 卷来卷去 云原生低延迟强一致性读 1 (SCC READ 译 )

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友…

python使用pysqlcipher3对sqlite数据库进行加密

python对很多项目都需要对sqlite数据库的数据进行加密&#xff0c;最流行的加密方式是使用pysqlcipher3&#xff0c;当前使用的python版本为3.7&#xff0c;本博文是直接使用pysqlcipher3在项目上的应用&#xff0c;使用的是已编译好的pysqlcipher3包&#xff0c;如果你需要pys…