将编号为 0 和 1 的两个栈存放于一个数组空间 V[m]中,栈底分别处于数组的两端。当第0 号栈的栈顶指针 top[0]等于-1 时该栈为空;当第 1 号栈的栈顶指针 top[1]等于 m 时,该栈

问题

将编号为 0 和 1 的两个栈存放于一个数组空间 V[m]中,栈底分别处于数组的两端。当第0 号栈的栈顶指针 top[0]等于-1 时该栈为空;当第 1 号栈的栈顶指针 top[1]等于 m 时,该栈为空。两个栈均从两端向中间增长(见下图)。试编写双栈初始化,判断栈空、栈满、进栈
和出栈等算法的函数。双栈数据结构的定义如下;
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef int Status;
typedef struct 
{
	int top[2],bot[2];	//栈顶和栈底指针
	SElemType *V;	//栈数组
	int m;	//栈最大可容纳元素个数
}DblStack;
Status InitStack1(DblStack S)
{
	S.V = (SElemType*)malloc(S.m*sizeof(SElemType)); 
	S.bot[0] = S.top[0]=-1;
	S.bot[1] = S.top[1]=S.m-1;	
	return 1;
}
int main()
{

	DblStack S;
	S.m=8;
	InitStack1(S);
	//Push0(S,1,8);
	//for(i=0;i<7;i++)
	//	printf("%d\n",S.V[i]);

}

这样写也是对的

#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef int Status;
typedef struct 
{
	int top[2],bot[2];	//栈顶和栈底指针
	SElemType *V;	//栈数组
	int m;	//栈最大可容纳元素个数
}DblStack;

Status InitStack1(DblStack S)
{
	S.m = 8;
	S.V = (SElemType*)malloc(8*sizeof(SElemType)); 
	S.bot[0] = S.top[0]=-1;
	S.bot[1] = S.top[1]=S.m-1;	
	return 1;
}

Status IsEmpty(DblStack S)
{
	if(S.bot[0]==S.top[0]||S.bot[1]==S.top[1])
		return 0;
	else
		return 1;
}

//Status Push1(DblStack S,int e)
//{
//	if( (S.top[0]-S.bot[0]) + (S.bot[1]-S.top[1]) == S.m )
//		return -1;
//	S.V[S.top[1]] = e;
//	S.top[1]--;
//}

//Status IsFull(DblStack &S,int m)
//{
//	if((S.top[0]-S.bot[0])+(S.bot[1]-S.top[1])==m)
//		return 1;
//	else 
//		return 0;
//}
//


//Status Push0(DblStack &S,int e,int m)
//{
//	if((S.top[0]-S.bot[0]) + (S.top[1]-S.bot[1]) == m)
//		return -1;
//	S.top[0]++;
//	S.V[S.top[0]];
//}
//
//
//void show(DblStack S,int m)
//{
//	int i;
//	for(i=0;i<m;i++)
//		printf("%d\n",S.V[m]);
//}


int main()
{
	DblStack S;
	InitStack1(S);
	//Push1(S,1);
	system("pause");
	//Push0(S,1,8);
	//for(i=0;i<7;i++)
	//	printf("%d\n",S.V[i]);

}

error一:
The variable ‘s’ is being used without being initialized
产生的原因是s的m没有赋值
error二:
在这里插入图片描述
产生的原因是结构体写的有问题

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是双初始化、判断满、进和出等算法的函数: ``` #include <stdio.h> #include <stdlib.h> #define ERROR -1 #define OK 1 typedef int SElemType; typedef struct { int top[2], bot[2]; // 指针 SElemType *V; // 数组 int m; // 最大可容纳元素个数 } DblStack; // 双初始化 int InitDblStack(DblStack *S, int m) { S->V = (SElemType *)malloc(m * sizeof(SElemType)); if (!S->V) { return ERROR; } S->top[0] = -1; S->bot[0] = 0; S->top[1] = m; S->bot[1] = m - 1; S->m = m; return OK; } // 判断 int IsDblStackEmpty(DblStack S, int i) { if (i == 0) { return S.top[0] == -1; } else if (i == 1) { return S.top[1] == S.m; } else { return ERROR; } } // 判断满 int IsDblStackFull(DblStack S) { return S.top[0] + 1 == S.top[1]; } // 进 int PushDblStack(DblStack *S, int i, SElemType e) { if (IsDblStackFull(*S)) { return ERROR; } if (i == 0) { S->top[0]++; S->V[S->top[0]] = e; } else if (i == 1) { S->top[1]--; S->V[S->top[1]] = e; } else { return ERROR; } return OK; } // 出 int PopDblStack(DblStack *S, int i, SElemType *e) { if (IsDblStackEmpty(*S, i)) { return ERROR; } if (i == 0) { *e = S->V[S->top[0]]; S->top[0]--; } else if (i == 1) { *e = S->V[S->top[1]]; S->top[1]++; } else { return ERROR; } return OK; } int main() { DblStack S; int m = 10; InitDblStack(&S, m); PushDblStack(&S, 0, 1); PushDblStack(&S, 1, 2); SElemType e; PopDblStack(&S, 0, &e); printf("%d\n", e); PopDblStack(&S, 1, &e); printf("%d\n", e); return 0; } ``` 其,InitDblStack函数用于初始化双,IsDblStackEmpty函数用于判断,IsDblStackFull函数用于判断满,PushDblStack函数用于进,PopDblStack函数用于出。在主函数,我们先初始化双,然后分别向两个压入元素,再从两个分别弹出元素并输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值