链式栈的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; //元素 ...
随机推荐
- Druid连接池(无框架)
关于连接池有不少技术可以用,例如c3p0,druid等等,因为druid有监控平台,性能在同类产品中算top0的.所以我采用的事druid连接池. 首先熟悉一个技术,我们要搞明白,为什么要用他, 他能 ...
- linux常用查看系统操作的linux命令
系统# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostna ...
- redis宕机时哨兵的处理
https://blog.csdn.net/a67474506/article/details/50435498 redis宕机是的故障处理 重启故障机 sentinel.conf 的配置会改变
- ubuntu下如何高速下载?
答: 使用uget工具 1.安装uget sudo apt-get install uget -y 2.下载时在设置里指定最大连接数 笔者指定最大连接数为10,可以适当调整此值
- Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器
因为在标准C语音中是不能获取SP指针的.因而,如果想通过C代码来获取入栈的寄存器值,需要配合一小段汇编代码来获取当前的SP值,然后再把这个SP值以参数形式传送给C代码,最后以指针的形式把栈中的各寄存器 ...
- c# 匿名类型获取值
代码片段: 读取 new{ ....} 方法1:转换为json对象 dynamic model = SaleOrderServices.GetGiftOrderById(WebHelper.GetQu ...
- java源码-ReentrantLock源码分析-1
ReentrantLock 继承于lock是比较常用的独占锁,接下来我们来分析一下ReentrantLock源码以及接口设计: Sync是ReentrantLock的内部静态抽象类继承Abstract ...
- python中日志logging模块的性能及多进程详解
python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...
- java:zookeeper集群配置,dubbo
1.zookeeper集群配置: 2.dubbo:(配置见视频)
- office web apps安装部署,配置https,负载均衡(五)配置服务器场
前提条件:您已经完成了域控制器的配置,拥有域账号,并且已经安装了OWA启动所需要的必要软件: 具体步骤可以参考: office web apps安装部署,配置https,负载均衡(一)背景介绍 off ...