数据结构:顺序栈与链栈的表示和实现

目录

一、顺序栈的表示和实现

1.初始化

2.入栈

3.出栈

二、链栈的表示和实现

1.初始化

2.入栈

3.出栈


一、顺序栈的表示和实现

1.初始化

为顺序栈分配空间,栈顶指针top初始为base表示栈为空。

Status InitStack(SqStack& S)
{
	// 为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
	s.base = new SElemType(MAXSIZE);; 

	//存储分配失败
    if (!S.base) exit(OVERFLOW);

	//top初始为base,表示空栈
	S.top = S.base; 

	//stacksize置为栈的最大容量MAXSIZE
	S.stacksize = MAXSIZE;  
	return OK;
}

2.入栈

判断栈是否满;将插入的新元素压入栈顶,栈顶指针加1.

//插入元素为e为新的栈顶元素
Status push(SqStack& S, SElemType e)
{
	if (S.top - S.base == S.stacksize)//栈满
	{
		return ERROR;
	}

	//将元素e压入栈顶,栈顶指针加1
	* S.top = e;
	S.top++;

	return OK;
}

3.出栈

判断栈是否空;栈顶指针减1,栈顶元素出栈。

//若栈不空,则删除S的栈顶元素
Status Pop(SqStack& S, SElemType& e)
{
	if (S.top == S.base) //栈空
	{
		return ERROR;
	}
	--S.top;  //栈顶指针下移,指向栈顶元素
	e = *S.top;  //用e接收栈顶元素
	return OK;
}

二、链栈的表示和实现

1.初始化

初始化链栈,将栈顶指针置空

//构造一个空栈S,减栈顶指针置空
void InisStack(LinkStack &S)
{
	S = NULL;
	return OK;
}

2.入栈

为入栈元素e分配空间,用指针p指向新空间;将新结点数据域置为e并插入栈顶,将栈顶指针改为p。

//在栈顶插入元素e
Status Push(LinkStack &S,SElemType e)
{
	p = new StackNode;//生成新结点p
	p -> data = e;//将新街点数据域置为e
	p -> next = S;//将新结点插入栈顶
	S = p;//修改栈顶指针为p
	return OK;
}

3.出栈

判断栈是否为空;将栈顶元素赋给返回值e,临时保存栈顶元素空间,将栈顶指针修改到指向新的元素,释放原栈顶元素空间。

Status pop(LinkStack &S,SElemType &e)
{
		if(NULL == S)
		{
				return ERROR;  //栈空
		}
		e = S->data;  //将栈顶元素赋给 e
		p = S;  //用p临时保存栈顶元素空间,以备释放
		S = S->next;  //修改栈顶指针

		delete p;  //释放原来栈顶元素的空间
		return OK;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值