数据结构:共享栈

实现思想

        共享栈(Shared Stack)是一种内存管理技术,通常用于操作系统和编程语言的运行时环境中,以支持多线程或多进程的程序。共享栈允许多个执行线程或进程共享同一个内存区域,这个内存区域用于存储局部变量、函数调用的返回地址等信息,下面是单链表的一些基本特性和操作:

  1. 内存效率:共享栈可以减少内存的使用,因为它避免了每个线程或进程都需要自己的栈空间

  2. 简化管理:操作系统或运行时环境可以更简单地管理内存,因为它们只需要维护一个共享的栈结构

  3. 上下文切换:在多线程环境中,线程切换时可以更快速地保存和恢复执行状态,因为所有线程都使用同一个栈

  4. 同步和互斥:由于多个线程可能同时访问共享栈,因此需要适当的同步机制来避免竞争条件和数据不一致

  5. 安全性:共享栈的使用需要考虑到安全性问题,确保一个线程的操作不会破坏其他线程的数据


包含头文件

#include<stdio.h>
#include<stdlib.h>

结点设计

#define Initsize 20
typedef int Elemtype;

typedef struct {
	Elemtype data[Initsize]; //定义数组data大小为Initsize,存储数据域
	int top1, top2;			 //定义整型变量top1存储头栈的指针,top2存储尾栈的指针
}DStack;

接口函数定义

bool InitDStack(DStack& A);				//定义函数InitDstack用于初始化共享栈
bool CheckDStack(DStack& A);			//定义函数CheckDStack用于判断共享栈是否为空
bool DStackInsert(DStack& A);			//定义函数DStackInsert用于向共享栈传入数据
bool PopDStack(DStack& A,int &X);		//定义函数PopDStack用于从共享栈中输出数据

接口函数实现

bool PopDStack(DStack& A,int &X) {	//定义函数PopDStack用于从共享栈中输出数据
	int Y;
	printf("请为想要在哪一个栈输出数据(A栈为1,B栈为2):");
	scanf_s("%d", &Y);
	while (Y == 1 || Y == 2) {			//判断用户调用哪一个栈输出数据
		if (Y == 1) {
			X=A.data[A.top1] ;			//头栈输出数据
			printf("数据为:%d", X);
			A.top1--;
			printf("是否要再输出数据(是为1,否为3):");
			scanf_s("%d", &Y);
		}
		else {
			X = A.data[A.top2];			//尾栈输出数据
			printf("数据为:%d", X);
			A.top2++;
			printf("是否要再输出数据(是为2,否为3):");
			scanf_s("%d", &Y);
		}
	}
	if (Y == 3) {
		return true;
	}
	printf("输入的对应指数错误");
	return false;
}

bool DStackInsert(DStack& A) {	//定义函数DStackInsert用于向共享栈传入数据
	int X,Y;
	printf("请为想要在哪一个栈传入数据(A栈为1,B栈为2):");
	scanf_s("%d", &X);
	while (X == 1 || X == 2) {			//判断用户在哪一个栈存储数据
		printf("请输入数据:");
		scanf_s("%d", &Y);
		if (X == 1) {
			A.top1++;					//头栈存储数据
			A.data[A.top1] = Y;
			printf("是否要再输入数据(是为1,否为3):");
			scanf_s("%d", &X);
		}
		else {
			A.top2--;					//尾栈存储数据
			A.data[A.top2] = Y;
			printf("是否要再输入数据(是为2,否为3):");
			scanf_s("%d", &X);
		}
	}
	if (X == 3) {						
		return true;
	}
	printf("输入的对应指数错误");
	return false;
}

bool CheckDStack(DStack& A) {	//定义函数CheckDStack用于判断共享栈是否为空
	if (A.top1 == -1 && A.top2 == Initsize) {		//判断传入的共享栈是否为空
		printf("该共享栈为空");
		return false;
	}
	else if (A.top1 == A.top2 - 1) {
		printf("该共享栈为满");
		return true;
	}
	else {
		printf("该共享栈不为空");
		return false;
	}
}


bool InitDStack(DStack& A) {	//定义函数InitDstack用于初始化共享栈
	A.top1 = -1;				//将共享栈A中所含的top1定义为-1,意为头指针
	A.top2 = Initsize;			//将共享栈A中所含的top2定义为Initsize,意为尾指针
	printf("初始化共享栈成功");
	return true;
}

相关推荐

  1. 数据结构共享

    2024-06-07 07:30:04       9 阅读
  2. 数据结构--

    2024-06-07 07:30:04       38 阅读
  3. 数据结构-

    2024-06-07 07:30:04       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-07 07:30:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-07 07:30:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-07 07:30:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-07 07:30:04       20 阅读

热门阅读

  1. mysql如何处理无效数据

    2024-06-07 07:30:04       8 阅读
  2. 测试开发面试题--计算机网络篇

    2024-06-07 07:30:04       11 阅读
  3. 门诊住院处方

    2024-06-07 07:30:04       9 阅读
  4. ios 获取图片的一部分区域

    2024-06-07 07:30:04       8 阅读