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

来源:互联网 发布:怎么逃避淘宝清洗订单 编辑:程序博客网 时间:2024/05/24 05:57

模板重写栈的基本操作,不多说,上代码,不足之处,麻烦大神指点。。。

基本操作如下:

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;}




0 0
原创粉丝点击