您的位置:首页 > 编程语言 > C语言/C++

C语言实现两栈空间共享

2015-11-24 15:26 465 查看
一个同学让我改一段两栈共享的C语言代码,实现进栈、出栈、输出栈里元素的功能。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef int     ElemType;
typedef int     Status;

typedef struct {
ElemType    data[MaxSize];
int         top1;
int         top2;
}Stack, *pStack;

//初始化
Status InitStack(pStack S)
{
S->top1 = -1;
S->top2 = MaxSize;
return 1;
}

//入栈函数
Status Push_Stack(pStack S, ElemType e, int stackNumber)
{
if (S->top1 + 1 == S->top2)
return 0;
switch (stackNumber)
{
case 1:     S->data[++S->top1] = e;       break;
case 2:     S->data[--S->top2] = e;       break;
}
return 1;
}

//出栈函数
Status Pop_Stack(pStack S, ElemType *e, int stackNumber)
{
if (1 == stackNumber)
{   //判断栈是否为空
if (-1 == S->top1)
return 0;
*e = S->data[--S->top1];
}
else if (2 == stackNumber)
{
if (MaxSize == S->top2)
return 0;
*e = S->data[++S->top2];
printf("出栈的元素为:%d\n",*e);
}
return 1;
}

//输出栈中的元素
Status DispStack(pStack S, int stackNumber)
{
int i;
if (1 == stackNumber)
{
if (-1 == S->top1){
printf("栈为空!\n");
return 0;
}
printf("栈1中的元素为:");
for (i = 0; i <= S->top1; i++)
printf("%d ", S->data[i]);
printf("\n");
printf("栈顶元素为:%d\n", S->data[S->top1]);
}
else if (2 == stackNumber)
{
if (MaxSize == S->top2){
printf("栈为空!\n");
return 0;
}
printf("栈2中的元素为:");
for (i = MaxSize - 1; i >= S->top2; i--)
printf("%d ", S->data[i]);
printf("\n");
printf("栈顶元素为:%d\n", S->data[S->top2]);
}
}

int main(void)
{
Stack S;
ElemType e;
int n;
int tmp;
InitStack(&S);
for (;;){
printf("请选择要输入哪个栈中的元素 1或2,退出输入请输入3:\n");
//Visual C++ 2012 使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些带有“_s”后缀的函数)
scanf_s("%d", &n);
if (3 == n)
{
break;
}
else if(1!=n && 2!=n){
printf("输入错别选项!请选择要输入哪个栈中的元素 1或2,退出输入请输入3:\n");
}
printf("请输入元素值:\n");
scanf_s("%d", &tmp);

if (1 == n || 2 == n)
{
if (0 == Push_Stack(&S, tmp, n)){
printf("栈已满,不能再添加元素!\n");
break;
}
}

}

while (true){
printf("请选择要输出哪个栈中的元素 1或2:\n");
scanf_s("%d", &n);
if (n == 1)
{
DispStack(&S, 1);
break;
}
else if (n == 2)
{
DispStack(&S, 2);
break;
}
else{
printf("输入错误选项!\n");
}
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: