您的位置:首页 > 理论基础 > 数据结构算法

c++数据结构——模板类重写栈

2015-10-18 13:16 288 查看
模板重写栈的基本操作,不多说,上代码,不足之处,麻烦大神指点。。。

基本操作如下:

bool Is_Empty(my_stack*a);//是否为空栈
T GetTop(my_stack*a);//获取栈顶元素
void Stack_Push(my_stack*a,T b);//入栈
T Stack_Pop(my_stack*a);//出栈
int StackLenth(my_stack* a);//获取栈的长度
my_stack* StackClear(my_stack* a);//清空栈内元素
void StackDestroy(my_stack* a);//销毁栈整个的代码如下:
#ifndef data_structure_stack_h
#define data_structure_stack_h
#include <iostream>
#include<vector>
#include<functional>//建立自己的模板函数
using namespace std;
//栈和队列的实现
//前置申明模板友元类
template<typename > class Stack_Node;
template<typename > class my_stack;
template<typename T>
bool operator== (const my_stack<T>&,const Stack_Node<T>&);
template<typename T>
class Stack_Node
{
public:
friend class my_stack<T>;
Stack_Node(){};
Stack_Node(T a):value(a),next(NULL){};
~Stack_Node(){};
private:
T value;
Stack_Node *next;
};
template<typename T>
class my_stack:public Stack_Node<T>
{
public:
my_stack(){};
~my_stack(){};
my_stack(T a)
{
top=new Stack_Node(a);
len=1;
}
bool Is_Empty(my_stack*a);//是否为空栈
T GetTop(my_stack*a);//获取栈顶元素
void Stack_Push(my_stack*a,T b);//入栈
T Stack_Pop(my_stack*a);//出栈
int StackLenth(my_stack* a);//获取栈的长度
my_stack* StackClear(my_stack* a);//清空栈内元素
void StackDestroy(my_stack* a);//销毁栈
private:
int len;
Stack_Node *top;
};
template<typename T>
bool my_stack<T>::Is_Empty(my_stack*a)
{
if(a->len) return false;
else return true;

}
template<typename T>
T my_stack<T>::GetTop(my_stack*a)
{
if(a->len) return a->top->value;
else
{
cout<<"the stack is empty! ";
exit(-1);
}
}
template<typename T>
void my_stack<T>::Stack_Push(my_stack*a,T b)
{
Stack_Node *p=new Stack_Node(b);
p->next=a->top;
a->top=p;
a->len++;
}
template<typename T>
T my_stack<T>::Stack_Pop(my_stack*a)
{
if(a->len)
{
T temp=a->top->value;
a->top=a->top->next;
a->len--;
return temp;
}
else
{
cout<<"the stack is empty!";
exit(-1);
}
}
template<typename T>
int my_stack<T>::StackLenth(my_stack* a)
{
return a->len;
}
template<typename T>
my_stack<T>* my_stack<T>::StackClear(my_stack* a)
{
my_stack *head;
head=a;
a->top=a->top->next;
a->len--;
while(a->len)
{
Stack_Node * p=a->top->next;
delete a->top;
a->top=p;
a->len--;
}
a=head;
a->top=NULL;
a->len=0;
return head;
}
template<typename T>
void my_stack<T>::StackDestroy(my_stack* a)
{
my_stack *head;
head=a;
a->top=a->top->next;
a->len--;
while(a->len)
{
Stack_Node * p=a->top->next;
delete a->top;
a->top=p;
a->len--;
}
delete head->top;
delete head;
}
#endif测试代码如下:
#include "data_structure_stack.h"
int main()
{
my_stack<int>* my1=new my_stack<int>(1);
my1->Stack_Push(my1,4);

my1->StackDestroy(my1);
bool aa=my1->Is_Empty(my1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: