(顺序)双向栈的简单实现

忙死了,好想给自己一个停下来的借口。

//i==0表示栈1,其他则为栈2
#include<stdio.h>
#include<stdlib.h>
#define elemtype int
#define MAX_SIZE 100
typedef struct{
	elemtype *base;
	elemtype top1;
	elemtype top2;
}TWS;
void InitStack(TWS &tws);
bool push(TWS &tws,int i,elemtype e);
bool pop(TWS &tws,int i,elemtype &e);
void DestroyStack(TWS &tws);
int main()
{
	elemtype e;
	TWS tws;
	InitStack(tws);
	push(tws,0,1);
	push(tws,0,2);
	push(tws,0,3);
	while(tws.top1!=0)
	{
		pop(tws,0,e);
		printf("%d ",e);
	}
	printf("\n");

	push(tws,1,3);
	push(tws,1,2);
	push(tws,1,1);
	while(tws.top2!=MAX_SIZE-1)
	{
		pop(tws,1,e);
		printf("%d ",e);
	}
	printf("\n");

	DestroyStack(tws);
	system("pause");
	return 0;
}
void InitStack(TWS &tws)
{
	tws.base=(elemtype*)malloc(MAX_SIZE*sizeof(elemtype));
	if(!tws.base)
		exit(-1);
	tws.top1=0;
	tws.top2=MAX_SIZE-1;
	return;
}
bool push(TWS &tws,int i,elemtype e)
{
	if(tws.top1==tws.top2+1)
		return false;
	if(i==0)
		tws.base[tws.top1++]=e;
	else
		tws.base[tws.top2--]=e;
	return true;
}
bool pop(TWS &tws,int i,elemtype &e)
{
	if(i==0)
	{
		if(tws.top1==0)
			return false;
		e=tws.base[--tws.top1];
	}
	else
	{
		if(tws.top2==MAX_SIZE-1)
			return false;
		e=tws.base[++tws.top2];
	}
	return true;
}
void DestroyStack(TWS &tws)
{
	free(tws.base);
	tws.base=NULL;
	tws.top1=0;
	tws.top2=MAX_SIZE-1;
	return;
}