栈数据结构的C++表示

栈也属于线性表中的一种,只不过是操作受限的线性表。

下图是两种存储结构(顺序存储结构和链式存储结构)

基本操作也就:初始化、入栈、出栈、取栈顶元素;

除了基本操作,还应该注意栈与递归的问题,这篇没有涉及,只写到了基本操作。

具体的一些含义和原理可参考诸多数据结构与算法的书籍。

查看源图像

 

 C++实现

#pragma once
#include <iostream>
using namespace std;

typedef int ElemType;
const int Maxsize = 20;
const int ERROR = 0;
const int OK = 1;

class Mystack
{
public:
	Mystack();
	~Mystack();
	int Push(ElemType &record);
	int Pop();
	ElemType GetTop();
private:
	ElemType* base;//顺序栈
	ElemType* top;
	int stacksize;
};

Mystack::Mystack()
{
	base = new ElemType[Maxsize];//判断一下是否开辟成功
	if (!base)
		exit(ERROR);
	top = base;
	this->stacksize = Maxsize;
}

int Mystack::Push(ElemType& record)
{
	if (top - base == this->stacksize)
		return ERROR;
	*top = record;
	top++;
	return OK;
}

int Mystack::Pop()
{
	if (top == base)
		return ERROR;
	else
	{
		top--;
		return OK;
	}
}

ElemType Mystack::GetTop()
{
	if (top != base)//top指向下一个元素
		return *(top - 1);
}

Mystack::~Mystack()
{
	if (base!=NULL)
	{
		delete[] base;
		base = NULL;
	}
	this->stacksize = 0;
	this->top = NULL;
}

链栈

#pragma once
#include <iostream>
using namespace std;

typedef int ElemType;
const int Maxsize = 20;
const int ERROR = 0;
const int OK = 1;

class StackNode
{
public:
	ElemType data;
	StackNode* next;
 };

class MyStack
{
public:
	MyStack();
	int Push(ElemType record);//入栈
	int Pop();//出栈
	ElemType GetTop();//获得栈顶元素
private:
	StackNode *s;//栈顶指针
};

MyStack::MyStack()
{
	this->s = NULL;
}

int MyStack::Push(ElemType record)//注意这个时候的指针域方向,即新入栈的指针于要指向上一个入栈的元素
{
	StackNode* p;
	p = new StackNode;
	p->data = record;
	p->next = s;
	s = p;
	return OK;
}

int MyStack::Pop()
{
	if (!this->s)
		return ERROR;
	else
	{
		StackNode* p;
		p = s;
		s = s->next;
		delete p;
		return OK;
	}
}

ElemType MyStack::GetTop()
{
	if (this->s)
		return s->data;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值