zoukankan      html  css  js  c++  java
  • 链式栈的C++实现

    这是去年的内容,之前放在github的一个被遗忘的reporsity里面,今天看到了就拿出来

    #include<iostream>
    #include<string>
    using namespace std;
    /*
    question#1;栈的链式存储
    goal:数据结构的建立、元素插入、删除等基本操作。
    解释实现过程,演示实现例子以及运行结果。
    */
    template <typename Type> class LinkStack;//the definition of template
    template<typename Type> class LinkStackNode
    {
    	friend class LinkStack<Type>;//the definition of friend class ,so the class LinkStack can use the private element of class LinkStack
    public:
    	LinkStackNode(Type &e, LinkStackNode<Type> *p = NULL) :elem(e), next(p) {};
    private:
    	Type elem;
    	LinkStackNode<Type>*next;//it points to the next element
    };
    template<typename Type>class LinkStack {
    public:
    	LinkStack() :top(NULL) {};//the initialization of LinkStack
    	~LinkStack();
    	int IsEmpty()const { return top == NULL; }
    	void LinkStackClear();
    	int LinkStackLength()const;
    	Type GetTop();
    	void Push(Type &e);
    	Type Pop();
    private:
    	LinkStackNode<Type>*top;
    };
    template <typename Type>//the template must be redefinited whenever it is used once
    LinkStack<Type>::~LinkStack()
    {
    	LinkStackNode<Type> *p;
    	while (top != NULL)
    	{
    		p = top;
    		top = top->next;
    		delete p;
    	}
    };
    //all methods are defined out of the class
    template <typename Type>
    void LinkStack<Type>::Push(Type &e)//Enter the LinkStack
    {
    	LinkStackNode<Type>* p;
    	p = new LinkStackNode<Type>(e, top);
    	if (p == NULL)
    	{
    		cout << "	The space distribution of LinkStackNode falls!" << endl;
    		return;
    	}
    	top = p;
    };
    template <typename Type>
    Type LinkStack<Type>::Pop()
    {
    	if (LinkStack::IsEmpty())
    	{
    		cout << "The LinkStack is empty!" << endl;
    		return 0;
    	}
    	LinkStackNode<Type> *p = top;
    	top = top->next;
    	Type q = p->elem;
    	delete p;
    	return q;
    };
    template <typename Type>
    Type LinkStack<Type>::GetTop()
    {
    	if (LinkStack::IsEmpty())
    	{
    		cout << "The LinkStack is empty!" << endl;
    		return 0;
    	}
    	return LinkStack::top->elem;
    };
    template <typename Type>
    int LinkStack<Type>::LinkStackLength()const
    {
    	LinkStackNode<Type>*p = top;
    	int i = 0;
    	while (p) { i++; p = p->next; }
    	return i;
    };
    template <typename Type>
    void LinkStack<Type>::LinkStackClear()
    {
    	LinkStackNode<Type>* p;
    	while (top->next != NULL)
    	{
    		p = top;
    		top = top->next;
    		delete p;
    	}
    };
    int main()
    {
    	string a = "aspect";
    	LinkStack<string>temp;//Pay attention here!You can only create objections instead of new classes by this.
    	temp.Push(a);
    	cout << temp.GetTop() << endl;
    	cout << temp.LinkStackLength() << endl;
    	cout << temp.Pop() << endl;
    	temp.Pop()
    	return 0;
    }
    
  • 相关阅读:
    圆珠笔芯为什么那么细
    2017第45周二
    浅谈XXE攻击
    谈谈ssrf
    htop简介
    关闭火狐定期向“http://detectportal.firefox.com/”发包
    linux登录用户(终端)间的通信
    linux下ftp、telnet的安装和使用
    深入解析hostname
    supervisor启动sqlmapapi失败 sqlmapapi: ERROR (file is not executable)
  • 原文地址:https://www.cnblogs.com/jiading/p/11747915.html
Copyright © 2011-2022 走看看