栈(顺序栈和链栈)

顺序栈

顺序栈表示

typedef struct{
	//栈底 
	elemtype *base;
	//栈顶
	elemtype *top;
	int stacksize; 
}Stack; 

简单表示一个顺序栈,base指针指着栈底,然后top指针指着栈顶元素的下一位置的地址,这样设置是为了方便操作栈顶元素。

顺序栈元素个数

数组表示的顺序栈里,可以用top-base,两个指针之差求得中间元素个数

顺序栈的初始化

elemtype是栈元素,数据类型自行定义

int InitStack(Stack &S){
	S.base=new elemtype[maxsize];
	if(!S.base){
		//指针创建失败
		return ERROR;
	}
	S.top=S.base;
	S.stacksize=maxsize;
	return OK;
}

栈的容量

栈空:top==base

栈满:top-base=stacksize

栈的操作

清空:若base存在,将top指针调整至与base指针指向同一位置,栈为空

销毁:释放栈底,将stacksize设置为0,top和base均设置为空指针

入栈

int InitStack(Stack &S){
	S.base=new elemtype[maxsize];
	if(!S.base){
		//指针创建失败
		return ERROR;
	}
	S.top=S.base;
	S.stacksize=maxsize;
	return OK;
}

出栈

int Pop(Stack &S,elemtype &e){
	//判断栈是否空 
	if(S.top==S.base){
		return ERROR;
	} 
	S.top--;
	e=*S.top;
	return OK;	
}

链栈

链栈是运算受限制的单链表,只能在链表头部进行操作

链栈没有头结点,头指针直接指向栈顶,空栈相当于头指针指向空,栈基本不会满,可以灵活扩大

栈的操纵

链栈的操作和单链表的类似,看起来神似一个指针方向倒过来的单链表

栈的初始化

typedef struct StackNode{
	elemtype data;
	struct StackNode *next;
}StackNode,*LinkStack;

LinkStack S;

int InitStack(LinkStack &S){
	//创造一个空的栈,头指针为空 
	S=NULL;
	return OK;
}

入栈

int Push(LinkStack &S,elemtype){
	//创建一个新节点 
	StackNode *p=new StackNode;
	//初始化节点 
	p->data=e;
	p-next=S;
	//修改栈顶指针 
	S=p;
	return OK;
} 

出栈

int Pop(LinkStack &S,elemtype &e){
	if(S==NULL){
		return ERROR;
	}
	e=S->data;

	StackNode p=S;
	//修改栈顶指针 
	S=S->next;
	//释放节点 
	delete p;
	return OK;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值