栈链式存储结构的C++模板类源代码

原创 2016年06月01日 10:01:48

采用链表的结构表示栈,具体修改类的成员函数,栈可以视为限制为特定功能的链表结构,每压入一个元素就动态分配内存,弹出元素时释放内存,析构的时候释放整个链表,此处应注意,链表的头指针也是一个动态分配的内存,注意在构造函数中分配和析构中释放。下面是栈链式存储的模板类头文件源代码:

//linkedstack.h
#ifndef LINKEDSTACK_H
#define LINKEDSTACK_H
#include <IOSTREAM>
template<class Type>
struct Node
{
Type data;
Node<Type>* next;
};
template<class Type>
class LinkedStack
{
private:
Node<Type>* head;
public:
LinkedStack();
~LinkedStack();
bool Push(Type);
Type Pop(); 
bool IsEmpty();
void Print();
};
template<class Type>
LinkedStack<Type>::LinkedStack()
{
head=new Node<Type>;
head->data=-111;
head->next=NULL;
}
template<class Type>
LinkedStack<Type>::~LinkedStack()
{
Node<Type>* temp=head;
while(temp)
{
Node<Type>* tempvalue=temp;
temp=temp->next;
delete tempvalue;
}
}
template<class Type>
bool LinkedStack<Type>::Push(Type temp)
{ 
Node<Type>* now=head;
Node<Type>* nowbefore=now;
while(now)
{
nowbefore=now;
now=now->next;
}
Node<Type>* element=new Node<Type>;
element->data=temp;
element->next=NULL;
nowbefore->next=element;
return true;
}
template<class Type>
Type LinkedStack<Type>::Pop()
{
if(IsEmpty())
return Type(-111);
Node<Type>* now=head->next;
Node<Type>* nowbefore=head;
Node<Type>* nowbeforebefore=NULL;
while(now)
{
nowbeforebefore=nowbefore;
nowbefore=now;
now=now->next;
} 
nowbeforebefore->next=NULL;
Type exam=nowbefore->data;
delete nowbefore;
return exam;
}
template<class Type>
bool LinkedStack<Type>::IsEmpty()
{
if(head->next)
return false;
else
return true;
}
template<class Type>
void LinkedStack<Type>::Print()
{
Node<Type>* temp=head->next;
while(temp)
{
std::cout<<temp->data<<" ";
temp=temp->next;
}
std::cout<<std::endl;
}
#endif

版权声明:本文为博主原创文章,未经博主允许不得转载。

栈的链式存储结构C++实现

栈的链式存储结构被称为链栈(linked stack) 链栈在本质上是简化后的单链表,所有操作只集中在链表的一端,模拟栈的出栈和压栈等操作。一般选择单链表的头部来作为栈顶比较方便。 /*******...
  • xiaolei09bupt
  • xiaolei09bupt
  • 2015年03月23日 10:37
  • 1604

栈及栈的链式存储结构(栈链)

栈、栈的链式存储结构(栈链)
  • duan19920101
  • duan19920101
  • 2016年05月06日 17:27
  • 8101

栈-链式存储结构-c语言

/* 栈 链式存储结构实现 第一个结构体是每一个节点元素, 类似于链表 第二个结构体是用个指针top指向链表的尾部 */ #include #include #define...
  • u010187139
  • u010187139
  • 2015年06月28日 18:42
  • 1609

C++线性表链式存储结构

本来想要在头结点的数据域存放链表长度,结果后来这样反而出了一些麻烦#include using namespace std; #define MAXSIZE 123 typedef int E...
  • LLLCSDN
  • LLLCSDN
  • 2015年12月11日 21:15
  • 889

线性表链式存储结构的C++模板类程序源代码

线性表链式存储结构就是链表,刚开始定义该结构的时候,一直困惑于链表的成员变量是否只是一个节点头指针,觉得为什么不能将节点结构体的数据和next节点指针直接作为链表的成员变量呢?现在回过头来想想,是混淆...
  • Alex123980
  • Alex123980
  • 2016年05月31日 19:58
  • 1058

数据学习之线性表的链式存储C++实现

最近一直在中国大学MOOC网上选修了浙江大学的《数据结构》课程。第二周的课程讲了线性表、堆栈和队列三种抽象数据类型。接下来三篇博客就这三种抽象数据类型进行总结和描述,并贴出C++实现的结构和主要的操作...
  • u012273127
  • u012273127
  • 2017年03月13日 20:59
  • 696

C++栈的顺序存储和链式存储的实现

栈是最常见的数据结构,其特点是后进先出(Last In First Out)也是链表的特殊形式,所以和链表一样,有两种存储方式,第一是顺序存储的栈,方便快速读写数据,但是栈的长度必须先固定;第二种是链...
  • shiwazone
  • shiwazone
  • 2015年07月25日 16:36
  • 1314

二叉树的链式存储与实现(C++)

二叉链表存储结构的类型定义如下:
  • tongxinhaonan
  • tongxinhaonan
  • 2014年05月24日 15:13
  • 1011

Python 数据结构 之 栈 的顺序、链式存储结构

Python 数据结构 之 线性表 的链式存储结构 Python 仿照C 语言实现
  • lqzhouxx
  • lqzhouxx
  • 2014年11月06日 02:24
  • 963

栈-顺序存储结构-c语言

/*栈 顺序存储结构实现*/ #include//定义常量 存储空间的初始化分配 #define MAXSIZE 20 #define ERROR 0 #define OK 1//用typedef定义...
  • u010187139
  • u010187139
  • 2015年06月28日 18:36
  • 2660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈链式存储结构的C++模板类源代码
举报原因:
原因补充:

(最多只允许输入30个字)