第三章 栈和队列(3.3.3)

3.3.3链栈的表示和实现

定义:

链栈是指采用链式存储结构实现的栈。通常链栈用单链表来表示。链栈的结构与单链表的结构相同

在此用StackNode来表示,定义如下:

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

由于栈的主要操作是在栈顶插入和删除,显然以链表的头部作为栈顶最方便。

1.初始化

1.1定义:

链栈的初始化操作就是投建一个空栈,因为没必要设头结点,所以直接将栈顶指针置空即可。

1.2算法描述:
Status InitStack(LinkStack& S)
{
	//构造一个空栈,栈顶指针置为空
	S = NULL;
	return OK;
}

2.入栈

2.1定义

链栈在入栈前不需要判断栈是否满,只需要为入栈元素动态分配一个结点空间。

2.2算法描述
Status Push(LinkStack& S, SElemType e)
{
	LinkStack p = (LinkStack)malloc(sizeof(StackNode));
	p->data = e;//将新结点数据域置为e
	p->next = S;//将新结点插入栈顶
	S = p;//修改栈顶指针
	return OK;
}//Push

3.出栈

3.1定义

链栈在出栈前也需要 判断栈是否为空,链栈在出栈后需要释放出栈元素的栈顶空间

3.2算法描述
Status Pop(LinkStack& S, SElemType& e)
{
	if (S == NULL)
		return ERROR;
	e = S->data;
	LinkStack p = S;
	S = S->next;
	free(p);
	return OK;
}//Pop

4.取栈顶元素

4.1定义

当栈非空时,此操作返回当前栈顶元素的值,栈顶指针s保持不变

4.2算法描述
Status GetTop(LinkStack S, SElemType& e)
{
	if (S != NULL)
	{
		e = S->data;
		return OK;
	}
	return ERROR;
}//GetTop
posted @ 2022-02-10 16:33    阅读(31)  评论(0)    收藏  举报