简单的自定义实现Stack模板(顺序栈以及链式栈没有迭代器和销毁)
来源:互联网 发布:沪江网络课程 编辑:程序博客网 时间:2024/06/07 21:51
*****************************************************************************************
用类和模板实现栈的操作
*****************************************************************************************/
#include<iostream>
#define MAX_SIZE 100
using namespace std;
template <typename T>
struct LStack
{
T Data;
LStack<T> *pnext;
LStack(T Data, LStack<T>* pnext) :Data(Data), pnext(pnext){}
};
template<typename T>
class Stack//顺序栈
{
public:
Stack(T size)//初始化栈
{
Top=0;
_SIZE = size;
Data = new T[size];
}
friend ostream &operator <<(ostream &a, T &b)
{
a << b;
}
T Push(T data)//压栈
{
if (Top >= _SIZE - 1)
{
cout << "栈已满" << endl;
return 0;
}
else
{
Data[Top++] = data;
return 1;
}
}
T OutStack(T* data)//出栈
{
if (Top <= 0)
{
cout << "栈空!" << endl;
return 0;
}
else
{
*data = Data[Top - 1];
Data[Top-- - 1].~T();//一块T类型内存析构
return 1;
}
}
protected:
T _SIZE;//栈容量
T Top;//栈顶
T* Data ;//顺序栈数组指针
private:
};
template <typename T>
class ListStack//链式栈
{
public:
ListStack()//初始化栈
{
Top = 0;
phead = NULL;
}
~ListStack()//析构
{
while (phead)
{
LStack<T>*pthis = phead;
phead = phead->pnext;
delete pthis;
}
}
void PushStack(T data)//压栈
{
phead = new LStack<T>(data, phead);
Top++;
}
void PopStack(T *data)//出栈
{
if (phead == NULL)
{
cout << "栈空" << endl;
}
else
{
*data = phead->Data;
LStack<T>* pthis = phead;
phead = phead->pnext;
delete pthis;
Top--;
}
}
protected:
T Top;
LStack<T>* phead;
private:
};
int main()
{
Stack<int> mystack(MAX_SIZE);//创建对象
int data;
for (int i = 0; i < 10; ++i)
{
mystack.Push(i*i);//压栈
cout << i *i<< endl;
}
cout << endl << endl;
for (int i = 0; i < 10; ++i)
{
mystack.OutStack(&data);//出栈
cout << data << endl;
}
cout << endl << endl;
ListStack<int> myliststack;
int Ldata;
for (int i = 0; i < 10; ++i)
{
myliststack.PushStack(i*i);//压栈
cout << i*i << endl;
}
cout << endl << endl;
for (int i = 0; i < 10; ++i)
{
myliststack.PopStack(&Ldata);//出栈
cout <<Ldata << endl;
}
system("pause");
return 0;
}
用类和模板实现栈的操作
*****************************************************************************************/
#include<iostream>
#define MAX_SIZE 100
using namespace std;
template <typename T>
struct LStack
{
T Data;
LStack<T> *pnext;
LStack(T Data, LStack<T>* pnext) :Data(Data), pnext(pnext){}
};
template<typename T>
class Stack//顺序栈
{
public:
Stack(T size)//初始化栈
{
Top=0;
_SIZE = size;
Data = new T[size];
}
friend ostream &operator <<(ostream &a, T &b)
{
a << b;
}
T Push(T data)//压栈
{
if (Top >= _SIZE - 1)
{
cout << "栈已满" << endl;
return 0;
}
else
{
Data[Top++] = data;
return 1;
}
}
T OutStack(T* data)//出栈
{
if (Top <= 0)
{
cout << "栈空!" << endl;
return 0;
}
else
{
*data = Data[Top - 1];
Data[Top-- - 1].~T();//一块T类型内存析构
return 1;
}
}
protected:
T _SIZE;//栈容量
T Top;//栈顶
T* Data ;//顺序栈数组指针
private:
};
template <typename T>
class ListStack//链式栈
{
public:
ListStack()//初始化栈
{
Top = 0;
phead = NULL;
}
~ListStack()//析构
{
while (phead)
{
LStack<T>*pthis = phead;
phead = phead->pnext;
delete pthis;
}
}
void PushStack(T data)//压栈
{
phead = new LStack<T>(data, phead);
Top++;
}
void PopStack(T *data)//出栈
{
if (phead == NULL)
{
cout << "栈空" << endl;
}
else
{
*data = phead->Data;
LStack<T>* pthis = phead;
phead = phead->pnext;
delete pthis;
Top--;
}
}
protected:
T Top;
LStack<T>* phead;
private:
};
int main()
{
Stack<int> mystack(MAX_SIZE);//创建对象
int data;
for (int i = 0; i < 10; ++i)
{
mystack.Push(i*i);//压栈
cout << i *i<< endl;
}
cout << endl << endl;
for (int i = 0; i < 10; ++i)
{
mystack.OutStack(&data);//出栈
cout << data << endl;
}
cout << endl << endl;
ListStack<int> myliststack;
int Ldata;
for (int i = 0; i < 10; ++i)
{
myliststack.PushStack(i*i);//压栈
cout << i*i << endl;
}
cout << endl << endl;
for (int i = 0; i < 10; ++i)
{
myliststack.PopStack(&Ldata);//出栈
cout <<Ldata << endl;
}
system("pause");
return 0;
}
阅读全文
0 0
- 简单的自定义实现Stack模板(顺序栈以及链式栈没有迭代器和销毁)
- 栈的顺序存储实现和链式存储实现
- C++栈的顺序存储和链式存储的实现
- C语言链式栈和顺序栈的实现
- c++顺序栈和链式栈的实现
- C++ 顺序栈和链式栈的实现
- C实现顺序栈和链式栈
- 顺序栈与链式栈的实现
- 栈的实现(顺序结构&&链式结构)
- 顺序栈的实现和c++模板
- 链式栈简单模板代码
- 栈的顺序存储和链式存储
- 栈的顺序存储和链式存储
- 队列的顺序实现和链式实现
- 栈(顺序+链式) java实现
- 重温数据结构:栈的顺序表示和实现与栈的链式表示和实现
- Algorithms: 栈(Stack) 链式与数组实现
- Stack栈 链式存储 实现
- OC语言学习05-数组的操作
- 斯坦福stanford coreNLP 宾州树库汉语短语类别表23个
- 时间类的静态成员计数
- Selenium webdriver Java ——IE浏览器启动
- editText属性
- 简单的自定义实现Stack模板(顺序栈以及链式栈没有迭代器和销毁)
- Echarts的研究(一)
- MIT6.828 LAB6: Network Driver
- 一张图理解Android事件传递机制
- Java实训第3天(Java语言基础)
- 关于如何配置java环境变量
- mybatis常用jdbcType数据类型
- Android 通过读取本地Arp表获取当前局域网内其他设备信息
- JS 产生随机数