链式栈的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;
}
链式栈的C++实现的更多相关文章
- C++实现链式栈,运用模板,界面友好,操作方便,运行流畅
//.h文件 #ifndef STACK_H #define STACK_H #include<iostream> #include<iomanip> using namesp ...
- C++数据结构之Linked Stack(链式栈)
上一节用连续的方式实现栈,这种方法用一个确定大小的数组存储栈元素,因为当存储达到数组上限时会遇到麻烦. 连续实现的栈与链式实现的栈的最大不同在于,前者使用一个确定大小的数组存储每一个栈元素,后者使用带 ...
- C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)
一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...
- 顺序栈和链式栈(C++实现)
顺序栈,是一种基于数组的存储表示. 实现类代码如下: template<class T> class SeqStack{ T *element; int top; int maxSize; ...
- java 实现简单的链式栈
package com.my; /** * 链式栈 * @author wanjn * */ public class LinkedStack { private Node head; private ...
- Interlocked单向链式栈
线程同步一大部分与原子访问(atomic access)有关, 所谓原子访问, 指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源. Interlocked单向链式栈的操作 ...
- 栈(链式栈)----C语言
链式栈:就是一种操作受限的单向链表,对单向链表还不了解的可先看一下之前的一篇关于单向链表的随笔,链表(单向链表的建立.删除.插入.打印),理解了单向链表后再来看链式栈就比较轻松了 链式栈的操作一般含有 ...
- Java的顺序栈和链式栈
栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...
- C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作
1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...
- 链式栈-C语言实现
相对于顺序栈的空间有限,链式栈的操作则更加灵活 #include<stdio.h> #include<malloc.h> typedef int SElemType; //元素 ...
随机推荐
- 7 Java 快速排序
快速排序(Quicksort)是对冒泡排序的一种改进. 1.基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别 ...
- android下载网络图片,设置宽高,等比缩放
使用Picasso组件去下载图片会发现图片宽高会变形不受等比缩放控制,即使设置了图片的 scaleType,可能是对Picasso的api没有用对, Picasso.with(this.activit ...
- ADS1.2与MDK4.7冲突问题的解决方法
需要添加2个系统变量. 1.添加环境变量名: ARMCC5LIB 变量值:C:\Keil\ARM\ARMCC\lib(实际Keil安装目录) 2.添加环境变量:ARMCC5INC变量值:C:\Keil ...
- 使用jQuery做简单的图片轮播效果
一.本特效主要用到的前端知识点 CSS中绝对定位(absolute)CSS实现垂直居中jQuery中简单的淡入淡出动画效果(fadeIn,fadeOut)定时器(setInterval,clear ...
- mongodb游标的使用
1.插入数据 ;i<;i++){ db.shop.insert({_id:i+,name:+i}) } 2.查看数据数 db.shop.find().count() 3.获取游标.判断是否还存在 ...
- Spark3.0 preview预览版尝试GPU调用(本地模式不支持GPU)
Spark3.0 preview预览版可以下载使用,地址:https://archive.apache.org/dist/spark/spark-3.0.0-preview/,pom.xml也可以进行 ...
- WDS部署Windows server2012初试
通过安装WDS,使用pxe自动部署Windows Server Active Directory详解:https://blog.51cto.com/terryli/141686 1.首先在VM虚拟机上 ...
- 了解XPath与XPath轴
XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. 节点(Node) 在 XPath 中,有七种类型的节点:元素.属性.文本.命名空间.处理 ...
- 运行python manage.py 出现mportError: No module named django.core.management when using manage.py
1 . linux下用virtualenv 创建虚拟空间环境没有安装djang,即使主机装了,否则运行python manage.py 出现mportError: No module named dj ...
- Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 <上>
前置步骤: 上一篇的Python单元测试框架unittest,我认为相当于功能测试测试用例设计中的用例模板,在自动化用例的设计过程中,可以封装一个模板,在新建用例的时候,把需要测试的步骤添加上去即可: ...