概述
main.c函数:
/*设有两个栈S1和S2都采用顺序栈的方式存储,并且共享一个存储区*/
#include<stdio.h>
#include<stdlib.h>
#define STACKSIZE 100
typedef int DataType;
#include "SSeqStack.h"
void main( )
{
SSeqStack S;
int i;
DataType a[] = { 'a', 'b', 'c', 'd', 'e' };
DataType b[] = { 'x', 'y', 'z', 'r' };
DataType e1, e2;
InitStack(&S);
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
if (PushStack(&S, a[i], 0) == 0)
{
printf("栈已满,不能进栈!");
return 0;
}
}
for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)
{
if (PushStack(&S, b[i], 1) == 0)
{
printf("栈已满,不能进栈!");
return 0;
}
}
if (GetTop(S, &e1, 0) == 0)
{
printf("栈已空!");
return 0;
}
if (GetTop(S, &e2, 1) == 0)
{
printf("栈已空!");
return 0;
}
printf("左端栈栈顶元素是:%c,右端栈栈顶元素是:%cn", e1, e2);
printf("左端栈元素的出栈顺序是:");
i = 0;
while (!StackEmpty(S, 0))
{
PopStack(&S, &e1, 0);
printf("%4c", e1);
}
printf("n");
printf("右端栈元素的出栈顺序是:");
while (!StackEmpty(S, 1))
{
PopStack(&S, &e2, 1);
printf("%4c", e2);
}
printf("n");
return 0;
}
/*SSeqStack.h函数:*/
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define STACKSIZE 100 typedef int DataType; typedef struct { DataType stack[STACKSIZE]; int top[2]; }SSeqStack; void InitStack(SSeqStack *S);//初始换栈 int StackEmpty(SSeqStack S, int flag);//判断栈是否为空 int GetTop(SSeqStack S, DataType *e, int flag);//取栈顶元素 int PushStack(SSeqStack *S, DataType e, int flag);//入栈 int PopStack(SSeqStack *S, DataType *e, int flag);//出栈 int StackLength(SSeqStack S, int flag);//求栈长度 void ClearStack(SSeqStack *S);//清空栈 void InitStack(SSeqStack *S)//初始换栈 { S->top[0] = 0; S->top[1] = STACKSIZE - 1; } int StackEmpty(SSeqStack S, int flag)//判断栈是否为空 { switch (flag) { case 0: if (S.top[0] == 0) { return 1; } break; case 1: if (S.top[1] == STACKSIZE - 1) { return 1; } break; default: return 0; } return 0; } int GetTop(SSeqStack S, DataType *e, int flag)//取栈顶元素 { switch (flag) { case 0: if (S.top[0] == 0) { return 0; } *e = S.stack[S.top[0] - 1]; break; case 1: if (S.top[1] == STACKSIZE - 1) { return 0; } *e = S.stack[S.top[1] + 1]; break; default: return 0; } return 1; } int PushStack(SSeqStack *S, DataType e, int flag)//入栈 { if (S->top[0] == S->top[1]) { return 0; } switch (flag) { case 0: S->stack[S->top[0]] = e; S->top[0]++; break; case 1: S->stack[S->top[1]] = e; S->top[1]--; break; default: return 0; } return 1; } int PopStack(SSeqStack *S, DataType *e, int flag)//出栈 { switch (flag) { if (S->top[0] == 0) { return 0; } case 0: S->top[0]--; *e = S->stack[S->top[0]]; break; case 1: if (S->top[1] == STACKSIZE - 1) { return 0; } S->top[1]++; *e = S->stack[S->top[1]]; break; default: return 0; } return 1; } int StackLength(SSeqStack S)//求栈长度 { return S.top[0] + S.top[1]; } void ClearStack(SSeqStack *S)//清空栈 { S->top[0] = 0; S->top[1] = STACKSIZE - 1; }
最后
以上就是冷酷雨为你收集整理的顺序栈共享的全部内容,希望文章能够帮你解决顺序栈共享所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复