首页 > 其他分享 >共享栈的实现(C语言)

共享栈的实现(C语言)

时间:2024-10-30 23:45:52浏览次数:3  
标签:return 实现 ElemType 元素 栈顶 C语言 ShStack 出栈 共享

作业三

一、共享栈的ADT

在这里插入图片描述

1、总体ADT的函数总览

void Init_ShStack(ShStack& S) ;				//1.初始化共享栈
bool Empty_Stack1(ShStack S);				//2. 1号栈判空
bool Empty_Stack2(ShStack S);				//2. 2号栈判空
void Push_Stack1(ShStack& S, ElemType x) ;			//3. 1号栈入栈
void Push_Stack2(ShStack& S, ElemType x);			//4. 2号栈入栈
ElemType Pop_Stack1(ShStack& S);			//5. 1号栈出栈
ElemType Pop_Stack2(ShStack& S);			//6. 2号栈出栈
ElemType Top_Stack1(ShStack S) ;		//7. 1号栈读取栈顶元素
ElemType Top_Stack2(ShStack S);		//8. 2号栈读取栈顶元素

1.1顺序结构实现元素存储

typedef struct {
	ElemType data[MAX_N];		//顺序结构实现元素存储
	ElemType head1;					//1号栈栈顶指针
	ElemType head2;					//2号栈栈顶指针
}ShStack;		//共享栈的定义

1.2:初始化共享栈

//初始化共享栈
void Init_ShStack(ShStack& S) 
{
	S.head1 = -1;		//初始化1号栈栈顶指针
	S.head2 = MAX_N;	//初始化2号栈栈顶指针
}

1.3:1号栈判空

//1号栈判空
bool Empty_Stack1(ShStack S)
{
	if (S.head1 == -1)
	{
		return true;
	}
	return false;
}

1.4: 2号栈判空

//2号栈判空
bool Empty_Stack2(ShStack S)
{
	if (S.head2 == MAX_N)
	{
		return true;
	}
	return false;
}

1.5: 1号栈入栈操作

//1号栈入栈操作
void Push_Stack1(ShStack& S, ElemType x) 
{
	if (S.head1 + 1 == S.head2)
	{
		printf("共享栈满了,错误!");
		return;
	}

	S.data[++S.head1] = x;	//push1-->
}

1.5: 2号栈入栈操作

//2号栈入栈操作
void Push_Stack2(ShStack& S, ElemType x)
{
	if (S.head1 + 1 == S.head2)
	{
		return;
	}
	S.data[--S.head2] = x;//push2-->
}

1.6: 1号栈出栈操作

//1号栈出栈操作
ElemType Pop_Stack1(ShStack& S)
{
	if (S.head1 == -1)
	{
		return 0;
	}
	return S.data[S.head1--];	//pop1-->
}

1.7: 2号栈出栈操作

//2号栈出栈操作
ElemType Pop_Stack2(ShStack& S)
{
	if (S.head2 == MAX_N)
	{
		return 0;
	}
	return S.data[S.head2++];	//pop2-->
}

1.8: 1号栈读取栈顶元素操作

//1号栈读取栈顶元素操作
ElemType Top_Stack1(ShStack S) 
{
	if (S.head1 == -1)
	{
		return 0;
	}
	return S.data[S.head1];
}

1.9: 2号栈读取栈顶元素操作

//2号栈读取栈顶元素操作
ElemType Top_Stack2(ShStack S)
{
	if (S.head2 == MAX_N)
	{
		return 0;
	}
	return S.data[S.head2];
}

1.10: main函数实现

int main() 
{
	ShStack S;		//声明一个共享栈
	Init_ShStack(S);	//初始化

	//1号栈-判空
	if (Empty_Stack1(S))
	{
		printf("当前1号栈空!\n");
	}
	else
	{
		printf("当前1号栈非空!\n");
	}

	//1号栈-入栈操作
	ElemType e1;	
	printf("请输入1号栈入栈元素的值:");
	scanf("%d", &e1);
	Push_Stack1(S, e1);

	//1号栈-读取栈顶元素
	ElemType e2 = -1;
	e2 = Top_Stack1(S);
	printf("1号栈读取栈顶元素成功,当前栈顶元素值为:%d\n", e2);

	//1号栈-出栈操作
	ElemType e3 = -1;
	e3 = Pop_Stack1(S);
	printf("1号栈栈顶元素出栈成功,出栈元素值为:%d\n", e3);
	

	//1号栈-读取栈顶元素(检验出栈是否成立)
	ElemType e4 = -1;
	e4 = Top_Stack1(S);
	printf("1号栈读取栈顶元素成功,当前栈顶元素值为:%d\n", e4);
	

	//2号栈-判空
	if (Empty_Stack2(S))
	{
		printf("当前2号栈空!\n");
	}
	else
	{
		printf("当前2号栈非空!\n");
	}

	//2号栈-入栈操作
	ElemType e5;
	printf("请输入2号栈入栈元素的值:");
	scanf("%d", &e5);
	Push_Stack2(S, e5);

	//2号栈-读取栈顶元素
	ElemType e6 = -1;
	e6 = Top_Stack2(S);
	printf("2号栈读取栈顶元素成功,当前栈顶元素值为:%d\n", e6);

	//2号栈-出栈操作
	ElemType e7 = -1;
	e7 = Pop_Stack2(S);
	printf("1号栈栈顶元素出栈成功,出栈元素值为:%d\n", e7);


	//1号栈-读取栈顶元素(检验出栈是否成立)
	ElemType e8 = -1;
	e8 = Top_Stack2(S);
	printf("2号栈读取栈顶元素成功,当前栈顶元素值为:%d\n", e8);


	system("pause");
	return 0;
}

标签:return,实现,ElemType,元素,栈顶,C语言,ShStack,出栈,共享
From: https://blog.csdn.net/2301_79365218/article/details/143348176

相关文章

  • Java项目--实现一个小说在线阅读系统
    登录,注册用户信息保存到哪里?集合中,临时存储,存储在内存中,当程序退出运行,占用内存释放,数据就没有了使用IO流,把用户信息保存到本地文件,推荐xml(数据一定的格式)适合一些微小型项目使用数据库:比如mysql,Oracle,…适合中大型项目我们这个项目:使用......
  • 3.C语言中scanf 和printf的重点介绍(续10/25篇)
    文章目录一、printf1.1基本用法1.2占位符1.3占位符列举1.4输出格式1.4.1限定宽度1.4.2总显示正负号1.4.3限定小数位数1.4.4输出部分字符串二、scanf2.1基本用法2.2scanf的返回值2.3占位符2.4赋值忽略符总结一、printf1.1基本用法printf()的作用......
  • QQ空间协议从登录到实现各种功能完整代码(专栏完结)
    QQ协议扫码登录、账号密码登录、说说、评论、点赞、访客、留言实现及代码——专栏完结本文章为包和实现代码汇总,每个功能的具体实现和分析过程请看本专栏对应的文章,不管扣代码还是分析都是超详细的教程本文为本专栏的完结汇总文章一、扫码登录 扫码登录流程:发送获取二......
  • 基于SpringBoot+Vue+uniapp的宿舍管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • JS实现图片放大镜效果
    代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • C语言符号意义大全
    C语言符号意义大全32个关键字及其含义:auto:声明自动变量一般不使用 double:声明双精度变量或函数 int:声明整型变量或函数 struct:声明结构体变量或函数 break:跳出当前循环 else:条件语句否定分支(与if连用) long:声明长整型变量或函数   switch:用于......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现九
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一定的挑......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现十
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一定的挑......
  • (C语言)数组
    目录一维数组1>.  定义2>. 数组的下标3>. 数组的初始化4>. 计算数组的大小    1)strlen    2)sizeof二维数组1>. 定义2>. 初始化    1)只有一个{}    2)多个{}变长数组数组定义:为了存放多个相同类型的元素,创建了数组;......
  • 【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式
    在现代分布式系统中,管理跨多个服务的长事务至关重要。传统的分布式事务解决方案往往面临性能瓶颈和复杂性问题,而Saga模式作为一种灵活高效的解决方案,逐渐受到开发者的青睐。本文将探讨如何利用SpringBoot和Kafka实现Saga模式,并详细介绍事务补偿机制,帮助你构建稳定......