数据结构课程要求算法-栈

宏定义部分

#define STACK_INIT_SIZE 100   //栈的初始容量
#define STACKINCREMENT 10	  //每次再分配的容量

栈的定义:

typedef struct{
	int *base;  //栈底
	int *top;	//栈顶
	int stacksize;  //当前栈的容量
}SqStack;

建栈

bool InitStack(SqStack &S){
	S.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));	//为栈分配大小为STACK_INIT_SIZE的空间
	if(!S.base)return false;								//如果分配空间失败,处理
		//exit(OVERFLOW);

	S.top=S.base;				
	S.stacksize=STACK_INIT_SIZE;							//初始时,栈顶指针=栈底指针,栈的容量为STACK_INIT_SIZE
	cout<<"Create stack successfully!"<<endl;
	return true;
}

入栈

bool Push(SqStack &S,int e){
//对空间进行判断,如果空间超过,进行再分配
	if(S.top-S.base >= S.stacksize * sizeof(int) ){
		S.base=(int *)realloc(S.base,S.stacksize + STACKINCREMENT * sizeof(int));
		if(!S.base)return false;
		//exit(OVERFLOW);

	//realloc使用后可能会影响栈底base的指针,所以重新寻找栈顶top
		S.top=S.base+S.stacksize * sizeof(int);
		S.stacksize += STACKINCREMENT;//栈的容量增加
	}

	//入栈操作
	*(S.top)=e;   //将e压入
	S.top+=sizeof(int);  //栈顶指针变化

	return true;
}

出栈

bool Pop(SqStack &S,int &e){
	if(S.top==S.base)
	{		
		cout<<"empty!"<<endl;
		return false;
	}
	S.top-=sizeof(int);
        e= *(S.top);
	return true;
}

得到栈顶元素

bool GetTop(SqStack S, int &e)
{
	if(S.top==S.base)
	{		
		cout<<"empty!"<<endl;
		return false;
	}
	S.top-=sizeof(int);
	e = *(S.top);
}

得到栈长
int StackLength(SqStack S){
	return (S.top-S.base)/sizeof(int);

}

遍历所有


bool StackTraverse(SqStack S){
	if(S.top==S.base)
	{		
		cout<<"empty!"<<endl;
		return false;
	}
	int *temp;
	temp=S.base;
	while(temp < S.top)
	{	
		//对每一项数据进行的操作 visit();
		cout<< *temp<<endl;
		temp=temp+sizeof(int);
	}
    return true;
}

其实,栈和线性表都是通过访问地址得到元素,是常用的数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值