您的位置:首页 > 理论基础 > 数据结构算法

共享栈

2017-11-27 18:13 127 查看

共享栈

共享栈能减少预分配空间过多造成的浪费,又能降低发生栈上溢而产生错误中断的可能性

示例代码

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
typedef struct{
int data[MAXSIZE];
int top1;
int top2;
}SharedStack;
int InitSStack(SharedStack *S);
int PushSStack(SharedStack *S, int x, int StackNumber);
int PopSStack(SharedStack *S, int *x, int StackNumber);
void print_hyphen(int n);
int main(void)
{
SharedStack ss;
if(!InitSStack(&ss)){
printf("共享栈初始化失败!\n");
exit(1);
}
else
printf("共享栈初始化成功!\n");
int end = 0;
int ope;
int n, StackNumber;
while(!end){
print_hyphen(15); printf("\n");
printf("请输入指令来执行操作\n");
print_hyphen(15); printf("\n");
printf("1、入栈\n2、出栈\n3、退出\n");
print_hyphen(15); printf("\n");
printf("输入要使用的功能的序号: ");
scanf("%d", &ope);
switch(ope){
case 1:
printf("请输入要入栈的数据: ");
scanf("%d", &n);
printf("请输入要所选栈的编号: ");
scanf("%d", &StackNumber);
PushSStack(&ss, n, StackNumber);
break;

case 2:
printf("请输入要出栈的栈的编号: ");
scanf("%d", &StackNumber);
PopSStack(&ss, &n, StackNumber);
printf("%d号栈出栈的元素为:%d\n", StackNumber, n);
break;

case 3:
printf("再见!\n");
end = 1;
break;

default:
printf("无此序号,请重新输入!\n");
}
}
return 0;
}
int InitSStack(SharedStack *S)
{
S->top1 = 0;
S->top2 = MAXSIZE -1;
return 1;
}
int PushSStack(SharedStack *S, int x, int StackNumber)
{
if(S->top1-1 == S->top2)
return 0;
switch(StackNumber)
{
case 1: S->data[S->top1++] = x; break;
case 2: S->data[S->top2--] = x; break;
}
return 1;
}
int PopSStack(SharedStack *S, int *x, int StackNumber)
{
if(StackNumber == 1){
if(S->top1 == 0)
return 0;
*x = S->data[--S->top1];
}
else if(StackNumber == 2){
if(S->top2 == MAXSIZE-1)
return 0;
*x = S->data[++S->top2];
}
return 1;
}
void print_hyphen(int n)
{
while(n--)
printf("-");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  共享栈 数据结构