网课题:用顺序存储结构建立双向栈,两个栈的栈底分别设在存储空间两端
编写三个操作,initstack(tws),Push(tws,i,e),Pop(tws,i) 其中i为0或1时,代表两个不同的栈
定义及初始化
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define OVERFLOW -1
typedef struct tws{
int *base;
int *top0,*top1;
int stacksize;
}tws;
void initstack(tws& s)
{
s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base) exit(OVERFLOW);
s.stacksize=STACK_INIT_SIZE;
s.top0=s.base;
s.top1=s.top0+s.stacksize-1;
}
栈的压入和弹出
void Push(tws& s,int i,int e)
{
if(s.top0>s.top1) return;//表示双向栈已满
if(i==0)
{
*s.top0=e;
s.top0++;
}
if(i==1)
{
*s.top1=e;
s.top1--;
}
else return;
}
void Pop(tws& s,int i,int* e)
{
if(i==0)
{
if(s.top0<=s.base) return;
s.top0--;
e=s.top0;
}
else if(i==1)
{
if(s.top1>=s.base+s.stacksize-1) return;
s.top1++;
e=s.top1;
}
else return;
}