作业三
一、共享栈的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