早教吧作业答案频道 -->其他-->
假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈Push(tw
题目详情
假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈 tws 的三个操作:初始化inistack(tws)、入栈Push(tws,I,x) 和出栈 pop(tws,i)的算法,其中 i 为 0或 1,用以分别指示设在数组两端的两个栈。
▼优质解答
答案和解析
实现下列3个函数:
Status InitStack(TwoWayStack &tws, int size);
Status Push(TwoWayStack &tws, int i, SElemType x);
Status Pop(TwoWayStack &tws, int i, SElemType &x);
双向栈类型定义如下:
typedef struct {
SElemType *elem;
int top[2];
int size; // 分配给elem的总容量
}TwoWayStack; // 双端栈
Status InitStack(TwoWayStack &tws, int size)
{ tws.elem=(SElemType*)malloc(sizeof(SElemType)*size);
tws.size=size;
tws.top[0]=0; //hao
tws.top[1]=size-1;
return OK;
}
Status Push(TwoWayStack &tws, int i, SElemType x)
{int w=tws.top[0];
if(w==tws.top[1]) return ERROR;
else if(i==0)
{
tws.elem[tws.top[0]]=x;
tws.top[0]=tws.top[0]+1;
}
else if(i==1)
{
tws.elem[tws.top[1]]=x;
tws.top[1]=tws.top[1]-1;
}
return OK;
}
Status Pop(TwoWayStack &tws, int i, SElemType &x)
{ if(tws.top[1]==tws.size-1&&i==1) return ERROR;
else if(tws.top[0]==0&&i==0) return ERROR;
else if(i==0)
{
tws.top[0]-=1;
x=tws.elem[tws.top[0]];
}
else if(i==1)
{
tws.top[1]+=1;
x=tws.elem[tws.top[1]];
}
return x;
}
Status InitStack(TwoWayStack &tws, int size);
Status Push(TwoWayStack &tws, int i, SElemType x);
Status Pop(TwoWayStack &tws, int i, SElemType &x);
双向栈类型定义如下:
typedef struct {
SElemType *elem;
int top[2];
int size; // 分配给elem的总容量
}TwoWayStack; // 双端栈
Status InitStack(TwoWayStack &tws, int size)
{ tws.elem=(SElemType*)malloc(sizeof(SElemType)*size);
tws.size=size;
tws.top[0]=0; //hao
tws.top[1]=size-1;
return OK;
}
Status Push(TwoWayStack &tws, int i, SElemType x)
{int w=tws.top[0];
if(w==tws.top[1]) return ERROR;
else if(i==0)
{
tws.elem[tws.top[0]]=x;
tws.top[0]=tws.top[0]+1;
}
else if(i==1)
{
tws.elem[tws.top[1]]=x;
tws.top[1]=tws.top[1]-1;
}
return OK;
}
Status Pop(TwoWayStack &tws, int i, SElemType &x)
{ if(tws.top[1]==tws.size-1&&i==1) return ERROR;
else if(tws.top[0]==0&&i==0) return ERROR;
else if(i==0)
{
tws.top[0]-=1;
x=tws.elem[tws.top[0]];
}
else if(i==1)
{
tws.top[1]+=1;
x=tws.elem[tws.top[1]];
}
return x;
}
看了 假设以顺序存储结构实现一个双...的网友还看了以下:
法是有严格的程序规定的规范,具有程序性.那么什么是程序性?法是强调程序、规定程序和实行程序的规范. 2020-04-27 …
面向对象与Java程序设计基础题目:设计一个程序可以一计算平面图形的面积和立体图形的体积。1.使用 2020-05-17 …
.Excel的数据排序,下列说法中正确的是().A.最多只能以3个关键字段进行排序B.只能对数据进 2020-05-23 …
一个n阶对称矩阵A采用一维数组S以行为主序存放其下三角各元素,设元素 A[i][j]存放在S[k]中 2020-05-26 …
由s、i、x三个字母和另外两个字母(非s、i、x)组成的五个字母的单词,例如:sixty、sixt 2020-06-02 …
一个IQ数学题用以下数字6,7,9,5,1,2,3,0做出一道题目要是AS*FIX-------- 2020-06-03 …
1、物体在水底的重力是不是等于支持力?如果是,哪来的重力=浮力+支持力2、液体压强公式P=F/S= 2020-06-04 …
两个整数a,b以一定顺序排在一起,称为一个整数序偶,记为(a,b);当a不等于b时……由于提问打不 2020-06-07 …
光子运动一光年的时间按相对论算有疑问!一光年是光运动一年的长度.那一个光子以光速运动一光年,静止参 2020-06-07 …
求以下招聘笔试题的答案。1.排序s-m-t-w-t-f-?2.如果六千,六百,六表示成6606,那 2020-06-08 …