数据结构与算法导论(C++)连载(四)--堆栈(顺序存储和链式存储)

本文深入探讨了堆栈的两种主要存储方式:顺序存储和链式存储。通过具体的代码实例,详细解释了如何在C++中实现这两种堆栈,并展示了它们的基本操作,包括压栈和出栈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆栈是一种特殊的线性表,因此也可以分为顺序存储和链式存储。队列最突出的特点是先进后出。

一、顺序存储

新建一个类Stack,在Stack.h中:


using namespace std;
#define ElementType int

#define Maxsize 1024

class Stack
{
public:
	Stack();
	~Stack();
	void Push(ElementType item);
	ElementType Pop();
private:
	ElementType Data[Maxsize];
	int Top;
};

在Stack.cpp中:

#include "Stack.h"

Stack::Stack()
{
	Top = -1;  //代表无数据
}


Stack::~Stack()
{
}

void Stack::Push(ElementType item)
{
	if (Top == Maxsize - 1)
		cout << "error\n";
	else
		Data[++Top] = item;
}

ElementType Stack::Pop()
{
	if (Top == -1) return -1;
	else return (Data[Top--]);
}

在main.cpp中:

#include"Stack.h"


int main()
{
	Stack S;
	S.Push(1); S.Push(2); S.Push(3); S.Push(4);
	cout << S.Pop() << "\n";
	cout << S.Pop() << "\n";
	S.Push(8);
	cout << S.Pop() << "\n";
	system("pause");
	return 0;
}

运行结果:

二、链式存储

新建一个类Stack,在Stack.h中:

#include"iostream"

using namespace std;
#define ElementType int

class SNode
{
public:
	ElementType Data;
	SNode * Next;
};


class Stack
{
public:
	Stack();
	~Stack();
	void Push(ElementType item);
	bool IsEmpty();
	ElementType Pop();
private:
	SNode * SPtr;
};

在Stack.cpp中:

#include "Stack.h"

Stack::Stack()
{
	SPtr = new SNode;
}


Stack::~Stack()
{
}

bool Stack::IsEmpty()
{
	return (SPtr->Next == NULL);
}

void Stack::Push(ElementType item)
{
	SNode * TmpCell = new SNode;
	TmpCell->Data = item;
	TmpCell->Next = SPtr->Next;
	SPtr->Next = TmpCell;
}

ElementType Stack::Pop()
{
	SNode * FistCell = new SNode;
	ElementType Tmp;
	if (IsEmpty()) return NULL;
	else
	{
		FistCell = SPtr->Next;
		SPtr->Next = FistCell->Next;
		Tmp = FistCell->Data;
		delete FistCell;
		return Tmp;
	}
}

在main.cpp中:

#include"Stack.h"


int main()
{
	Stack S;
	S.Push(4); S.Push(3); S.Push(7); S.Push(5);
	cout << S.Pop() << "\n";
	cout << S.Pop() << "\n";
	S.Push(8);
	cout << S.Pop() << "\n";
	system("pause");
	return 0;
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值