这是去年的内容,之前放在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;
}

链式栈的C++实现的更多相关文章

  1. C++实现链式栈,运用模板,界面友好,操作方便,运行流畅

    //.h文件 #ifndef STACK_H #define STACK_H #include<iostream> #include<iomanip> using namesp ...

  2. C++数据结构之Linked Stack(链式栈)

    上一节用连续的方式实现栈,这种方法用一个确定大小的数组存储栈元素,因为当存储达到数组上限时会遇到麻烦. 连续实现的栈与链式实现的栈的最大不同在于,前者使用一个确定大小的数组存储每一个栈元素,后者使用带 ...

  3. C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)

    一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...

  4. 顺序栈和链式栈(C++实现)

    顺序栈,是一种基于数组的存储表示. 实现类代码如下: template<class T> class SeqStack{ T *element; int top; int maxSize; ...

  5. java 实现简单的链式栈

    package com.my; /** * 链式栈 * @author wanjn * */ public class LinkedStack { private Node head; private ...

  6. Interlocked单向链式栈

    线程同步一大部分与原子访问(atomic access)有关, 所谓原子访问, 指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源. Interlocked单向链式栈的操作 ...

  7. 栈(链式栈)----C语言

    链式栈:就是一种操作受限的单向链表,对单向链表还不了解的可先看一下之前的一篇关于单向链表的随笔,链表(单向链表的建立.删除.插入.打印),理解了单向链表后再来看链式栈就比较轻松了 链式栈的操作一般含有 ...

  8. Java的顺序栈和链式栈

    栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...

  9. C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...

  10. 链式栈-C语言实现

    相对于顺序栈的空间有限,链式栈的操作则更加灵活 #include<stdio.h> #include<malloc.h> typedef int SElemType; //元素 ...

随机推荐

  1. MySQL 主从复制 (CentOS 7)

    1.主从复制原理 (1) 当master 服务器上的数据发生改变时,则将其改变写入二进制日志文件中: (2) slave服务器会在一定时间间隔内对 master 服务器上的二进制日志进行探测,探测其是 ...

  2. Haskell 安装

    1.Ubuntu 安装过程中出现了一些问题: 1)W: An error occurred during the signature verification. The repository is n ...

  3. Mysql-将一张表中的数据批量导入另一张表中

    由于mysql不支持select into 方法,mysql怎样将一张表的查询结果存到另一张表中? 找了两个方法 第一种: create table dust select * from studen ...

  4. Spring mvc中@RequestMapping 基本用法

    @RequestMapping(value="/departments") public String simplePattern(){ System.out.println(&q ...

  5. datatable 用法

    DataTable datainsert = dt.GetChanges(DataRowState.Added); DataTable datadelete = dt.GetChanges(DataR ...

  6. 算法之顺序、二分、hash查找

    算法之顺序.二分.hash查找   一.查找/搜索 - 我们现在把注意力转向计算中经常出现的一些问题,即搜索或查找的问题.搜索是在元素集合中查找特定元素的算法过程.搜索通常对于元素是否存在返回 Tru ...

  7. BOM Summary P268-P269

    The Browser Object Model(BOM) is based on the window object, which represents the browser window and ...

  8. 比较Json.Net和fastJson的效率

    var zoo1 = new zoo(); zoo1.animals = new List<animal>(); zoo1.animals.Add(new cat()); zoo1.ani ...

  9. Beego框架的一条神秘日志引发的思考

    公司目前的后台是用Beego框架搭的,并且为了服务的不中断升级,我们开启了Beego的Grace模块,用于热升级支持.一切都跑井然有序,直到有一天,领导甩出一些服务日志,告知程序一直报错: 2018/ ...

  10. NOIp2018D1T1 积木大赛 【思维】

    题目传送门 感觉不是很难,但是需要一些思考... 可以发现,贪心地向尽量大的区间添加,但是存在一些比较小的数,它们不需要再加了,就会从那个地方断成两个区间.所以刚开始想到的做法就是统计每一种数的数量, ...