顺序栈--C++语言实现

1.seqStack.h文件

#pragma once

#include<iostream>

const int stackSize = 10;

template<typename DataType>
class SeqStack
{
public:
	SeqStack();
	~SeqStack();
	void push(DataType data);
	DataType pop();
	int seqStackLength();
	void clearSeqStack();
	void getTop(DataType& data);  //取栈顶元素
	void printSeqStack();
	bool seqStackEmpty();
private:
	int top;
	int base;
	DataType seqStack[stackSize];
};

2.seqStack.cpp文件

#include"seqStack.h"
#include<iostream>

using namespace std;

template<typename DataType>
SeqStack<DataType>::SeqStack()
{
    top = base = 0;
}

template<typename DataType>
SeqStack<DataType>:: ~SeqStack()
{
    
}

//求顺序栈长度
template<typename DataType>
int SeqStack<DataType>::seqStackLength()
{
    return top - base;
}

//判断顺序栈是否为空
template<typename DataType>
bool SeqStack<DataType>::seqStackEmpty()
{
    if (top == base)
    {
        return true;
    }
    return false;
}

//入栈
template<typename DataType>
void SeqStack<DataType>::push(DataType data)
{
    if ((top - base) == stackSize)
    {
        cout << "栈满了,无法插入元素" << endl;
        return;
    }
    seqStack[top++] = data;
}

//出栈
template<typename DataType>
DataType SeqStack<DataType>::pop()
{ 
    DataType x = -1;
    if ((top - base) == 0)
    {
        cout << "栈空,没有元素可以出栈" << endl;
        return x;
    }
    top--;
    x = seqStack[top];
     return x;
}

//清空栈
template<typename DataType>
void SeqStack<DataType>::clearSeqStack()
{
    //说明栈内还有元素
    if ((top - base) != 0)
    {
        base = top = 0;   //清空
        cout << "顺序栈已经清空" << endl;
        return;
    }
    cout << "顺序栈已经,无需清空" << endl;
}

//获取栈顶元素
template<typename DataType>
void SeqStack<DataType>::getTop(DataType& data)
{
    if (top - base == 0)
    {
        cout << "顺序栈没有元素,无法获取栈顶元素" << endl;
        return;
    }
    data = seqStack[top - 1];
    cout << "获取的栈顶元素是:" << data << endl;
}

//打印顺序栈元素
template<typename DataType>
void SeqStack<DataType>::printSeqStack()
{
    if (top - base == 0)
    {
        cout << "当前顺序栈没有元素可以进行遍历" << endl;
    }
    for (int i = base; i < top; i++)
    {
        cout << seqStack[i] << " ";
    }
    cout << endl;
}

3.测试代码--顺序栈.cpp

#include<iostream>
#include"seqStack.h"
#include"seqStack.cpp"

using namespace std;

void test01()
{
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	SeqStack<int> seqStack{};
	bool res = seqStack.seqStackEmpty();
	if (res)
	{
		cout << "顺序栈为空" << endl;
	}
	else
	{
		cout << "顺序栈不为空" << endl;
	}
	cout << "当前顺序栈的长度为:" << seqStack.seqStackLength() << endl;
	for (int i = 0; i < 10; i++)
	{
		seqStack.push(i);
	}
	for (int i = 0; i < 10; i++)
	{
		cout << "出栈的元素为:" << seqStack.pop() << endl;
	}
	cout << "当前顺序栈的长度为:" << seqStack.seqStackLength() << endl;
	seqStack.printSeqStack();
	//cout << "出栈的元素为:" << seqStack.pop() << endl;
	cout << "当前顺序栈的长度为:" << seqStack.seqStackLength() << endl;
	int x;
	seqStack.getTop(x);
	seqStack.printSeqStack();
	seqStack.clearSeqStack();
}

int main()
{
	test01();
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值