[数据结构-严蔚敏版]P48栈的链式表示

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构-严蔚敏版]P48栈的链式表示相关的知识,希望对你有一定的参考价值。

代码如下:

#include <iostream>
using namespace std;

typedef int ElemType;

typedef struct SNode
{
	ElemType data;
	SNode *next;
}SNode;

typedef struct
{
	SNode *top;
}SqStack;

bool initStack(SqStack &s)
{
	s.top = nullptr;
	return true;
}

bool destroyStack(SqStack &s)
{
	SNode *q = nullptr;
	while (s.top)
	{
		q = s.top;
		s.top = s.top->next;
		delete q;
	}
	s.top = nullptr;
	return true;
}

bool stackEmpty(SqStack s)
{
	if (!s.top) return true;
	return false;
}

int stackLength(SqStack s)
{
	int j = 0;
	SNode *q = s.top;
	while (q)
	{
		j++;
		q = q->next;
	}
	return j;
}

bool getTop(SqStack s, ElemType &e)
{
	if (s.top)
	{
		e = s.top->data;
		return true;
	}
	return false;
}

bool push(SqStack &s, ElemType e)
{
	SNode *q = new SNode;
	if (!q) return false;
	q->data = e;
	q->next = s.top;
	s.top = q;
	return true;
}

bool pop(SqStack &s, ElemType &e)
{
	if (s.top)
	{
		SNode *q = s.top;
		s.top = s.top->next;
		e = q->data;
		delete q;
		return true;
	}
	return false;
}

void vis(ElemType e)
{
	cout << e << " ";
}

void stackTraverse(SqStack s, void(*visit)(ElemType))
{
	SNode *q = s.top;
	SqStack s1;
	initStack(s1);
	while (q)
	{
		push(s1, q->data);
		q = q->next;
	}
	ElemType a;
	while (!stackEmpty(s1))
	{
		pop(s1, a);
		visit(a);
	}
	destroyStack(s1);
}

int main()
{
	SqStack s;
	initStack(s);
	int n;
	int a;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a;
		push(s, a);
	}
	getTop(s, a);
	cout << "a = " << a << endl;
	stackTraverse(s, vis);
	cout << endl;
	pop(s, a);
	pop(s, a);
	stackTraverse(s, vis);
	cout << endl;
	cout << stackLength(s) << endl;
	return 0;
}



以上是关于[数据结构-严蔚敏版]P48栈的链式表示的主要内容,如果未能解决你的问题,请参考以下文章

[数据结构-严蔚敏版]P61ADT Queue的表示与实现(单链队列-队列的链式存储结构)

线性表的顺序表示和实现(严蔚敏版)

[数据结构-严蔚敏版]P37定义一个带头结点的线性链表

[数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构

[数据结构-严蔚敏版]P71串的抽象数据类型的定义

[数据结构-严蔚敏版]P42多项式Polynomial的实现