10/9


include<stdio.h>

include<malloc.h>

//定义
typedef struct {
int top[2], bot[2];
int* V;
int m;
}DblStack;

/*
初始化:为栈空间分配一个大小为m的数组空间。0号栈的栈顶指针和栈底指针的初始值都是-1;
1号栈的栈顶指针和栈底指针的初始值都是m。表示栈空。
*/
int InitStack(DblStack& S, int m) {

//S.V=new int[m];//写成下面的语句也一样 
S.V = (int*)malloc(m * sizeof(int));
if (!S.V) {
	return 0;//存储分配失败 
}
S.top[0] = -1;
S.bot[0] = -1;
S.top[1] = m;
S.bot[1] = m;
return 1;

}

/*
判断双栈是否为空:0号栈的栈顶指针和栈底指针的初始值都是-1;
1号栈的栈顶指针和栈底指针的初始值都是m。表示栈空。
*/
int IsEmpty(DblStack& S) {
if ((S.top[0] == S.bot[0]) && (S.top[1] == S.bot[1])) {
return 1;//栈空
}
else {
return 0;//栈非空
}
}

/*
判断栈是否满:当S.top[1]-S.top[0]==1时,表示栈满。
*/
int IsFull(DblStack& S) {
if (S.top[1] - S.top[0] == 1) {
return 1;//栈满
}
else {
return 0;//栈不满
}
}

/*
进栈:首先判断栈是否满,若满返回0;否则返回1.
*/
int Push(DblStack& S, int e1, int e2) {
//元素e1进入0号栈,元素e2进入1号栈
if (IsFull(S)) {
return 0;//栈已满,无法入栈
}
// *++S.top[0]=e1;
// *++S.top[1]=e2;
S.V[++S.top[0]] = e1;
//因为栈空间是放在数组中的,所以,进操作类似于向数组中添加元素。
S.V[--S.top[1]] = e2;
return 1;
}

/*
出栈:首先判断栈是否为空,若空返回0;否则返回1。
/
int Pop(DblStack& S, int& e1, int& e2) {
//用e1返回0号栈的栈顶元素;用e2返回1号栈的栈顶元素。
if (IsEmpty(S)) {
return 0;
}
// e1=
--S.top[0];
// e2=*--S.top[1];
e1 = S.V[S.top[0]--];//出栈操作也类似于数组的操作。
e2 = S.V[S.top[1]++];
return 1;
}

int main() {

DblStack S;
int m;
printf("请输入双栈的数组空间大小:");
scanf_s("%d", &m);
if (InitStack(S, m)) {
	printf("双栈初始化成功!\n");
}
else {
	printf("双栈初始化失败!\n");
}

if (IsEmpty(S)) {
	printf("双栈S为空!\n");
}
else {
	printf("双栈S非空!\n");
}

if (IsFull(S)) {
	printf("双栈已满!\n");
}
else {
	printf("双栈未满!\n");
}

int n;
printf("请输入每个栈入栈的元素个数:");
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
	int e1, e2;
	printf("请输入每个栈的第%d个元素:", i + 1);
	scanf_s("%d%d", &e1, &e2);
	if (Push(S, e1, e2)) {
		printf("入栈成功\n");
	}
	else {
		printf("入栈失败\n");
	}
}

int e1, e2;
Pop(S, e1, e2);
printf("两个栈的栈顶元素出栈:%d %d", e1, e2);

}

posted @   雨花阁  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示