为了增加内存空间的利用率和减少溢出的可能性,通常采用两个栈利用同一块存储空间的方法。通常两个栈的栈底设在内存空间的两端,而栈顶相向,迎面增长。已知有两个栈s1、s2都采用顺序栈方式,并且共享一个存储区[0~maxsize一1]。 设计共享存储空间的

admin2019-08-15  34

问题 为了增加内存空间的利用率和减少溢出的可能性,通常采用两个栈利用同一块存储空间的方法。通常两个栈的栈底设在内存空间的两端,而栈顶相向,迎面增长。已知有两个栈s1、s2都采用顺序栈方式,并且共享一个存储区[0~maxsize一1]。
    设计共享存储空间的两个栈s1、s2的入栈和出栈算法。要求:
根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释;

选项

答案算法设计如下: #define maxsize //两栈共享顺序存储空间所能达到的最多元素数 #define elemtp int //假设元素类型为整型 typedef struct { elemtp stack[maxsize];//栈空间 int top[2]; //top为两个栈顶指针 }stk; stk s: //s是如上定义的结构类型变量,为全局变量 ①入栈操作: int push(int i,int x){ //入栈操作。i为栈号,i=0表示左边的栈sl,i=1表示右 //边的栈s2,x是入栈元素。入栈成功返回1,否则返回0 if(i<0 ∣∣i>1){printf(”栈号输入不对”);exit(0); } if(s.top[1]一s.top[0]==1){printf(”栈已满\n”);return(0); } switch(i){ case 0:s.stack[++s.top[0]]=x:return 1;break; case l:s.stack[--s.top[1]]=x;return 1: } } ②退栈操作: elemtp pop(int i){ if(i<0∣∣i>1){printf(”栈号输入错误\n”): exit(0);} switch(i){ case 0:if(s.top[0]==一1){prinff(”栈空\n”);retum一1;} else return s.stack[s.top[0]--]: case 1:if(s.top[1]==maxsize}{printf(”栈空\n”);retum一1;} else return s.stack[s.top[1]++]; } }

解析
转载请注明原文地址:https://jikaoti.com/ti/2YGjFFFM
0

相关试题推荐
最新回复(0)