实验环境:Ubuntu20.04
首先是基于顺序栈的基础上,完成相关操作。
我分别设置了三个文件一个DataStack.cpp文件一个DataStack.h文件一个用于测试的test.cpp文件
其中DataStack.h文件内容如下:
#ifndef _DATASTACK_H
#define _DATASTACK_H
#include <iostream>
using namespace std;
#define STACK_SIZE 20 //栈的默认大小
template <typename T>
class MyStack
{
template <typename U>
friend ostream &operator<< (ostream &out, MyStack<U> &s_stack);
public:
MyStack(); //默认构造函数
MyStack(int size); //带参构造
~MyStack(); //释放开辟的堆区空间
void Push(T data); //入栈
//T Search(int pos);
//void Insert(T data, int pos);
//T Remove(int pos);
T Pop(); //出栈
private:
int s_size; //栈能够容纳的大小
int s_point; //当前栈顶指针的位置,-1代表没有元素
T *s_ptr;
};
//创建一个类,测试存储一个类
class Person
{
friend ostream &operator<<(ostream &out, const Person &per);
public:
Person();
Person(string name, int age);
void SetName(string name);
void SetAge(int age);
private:
string p_name;
int p_age;
};
ostream &operator<<(ostream &out, const Person &per); //显示存储的系统自带的数据类型的数据
template <typename U>
ostream &operator<<(ostream &out, MyStack<U> &s_stack); //显示存储类中的数据
#endif
其中Search、Remove、Insert三个函数是后面添加进来的函数,所以现在先注释掉(因为当前只是用栈来实现相关的内容),后面用到数组存储数据再将这三个函数解开。
DataStack.cpp对头文件的具体实现内容如下:
#include "DataStack.h"
template <typename T>
MyStack<T