#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#pragma once
void Error(string error)
{
cout<<error<<endl;
system("pause");
exit(1);
}
//链式栈
//测试时间2010-3-4
#pragma once
#ifndef LINKNODE_H
#define LINKNODE_H
template<class T>
class LinkNode
{
public:
T data; //数据域
LinkNode<T> *next; //链指针
LinkNode(LinkNode<T> *p=NULL){next=p;} //仅初始化指针成员的构造函数
LinkNode(T item,LinkNode<T> *p=NULL) //初始化数据与指针成员的构造函数
{ data=item;next=p;}
};
#endif
#ifndef LINKSTACK_H
#define LINKSTACK_H
template<class T>
class LinkStack
{
private:
LinkNode<T>* top;
int size;
public:
LinkStack(){top=NULL;size=0;} //构造函数
~LinkStack(){ClearStack();} //析构函数
void ClearStack(); //清空堆栈
int Size(){return size;} //返回堆栈长度
void Push(T data); //进栈
T Pop(); //出栈
LinkNode<T>* GetTop(); //取得栈顶元素指针
bool IsEmpty(); //判断堆栈是否为空
LinkStack<T>& operator=(LinkStack<T>& stack); //运算符重载
};
#endif
template<class T>
void LinkStack<T>::ClearStack()
{
LinkNode<T> *node;
while(top!=NULL)
{
node=top;
top=top->next;
delete node;
}
size=0;
}
template<class T>
void LinkStack<T>::Push(T data)
{
top=new LinkNode<T>(data,top);
size++;
if(top==NULL)
Error("进栈失败!");
}
template<class T>
T LinkStack<T>::Pop()
{
if(size==0)
Error("出栈失败!");
LinkNode<T>* node=top;
top=top->next;
T data=node->data;
delete node;
node=NULL;
size--;
return data;
}
template<class T>
LinkNode<T>* LinkStack<T>::GetTop()
{
if(size==0)
Error("读取数据出错!");
return top;
}
template<class T>
bool LinkStack<T>::IsEmpty()
{ return (size==0)?true:false;}
template<class T>
LinkStack<T>& LinkStack<T>::operator =(LinkStack<T> &stack)
{
LinkNode<T> *node=stack.GetTop();
LinkStack<T> s;
while(node!=NULL)
{
s.Push(node->data);
node=node->next;
}
while(s.Size()>0)
{
Push(s.Pop());
}
return *this;
}
分享到:
相关推荐
C语言实现判定输入字符串中的括号是否配对...本实例用于C语言以及数据结构中栈的学习,此外, 链式栈的.c和.h文件实现了以下功能: 创建链式栈 入栈 判断栈是否为空 出栈 清空栈 销毁栈 打印栈(为了便于观察实验现象)
数据结构是计算机科学中的核心概念,它涉及到如何高效地组织和操作数据。...总的来说,数据结构的学习是提升编程能力的关键,熟练掌握栈的顺序存储和链式存储将有助于解决复杂的问题,并优化算法效率。
数据结构学习中,栈是一种非常基础且重要的结构,它被称为后进先出(LIFO,Last In First Out)的数据组织形式。在栈中,新添加的元素(压栈)会在最后,而取出元素(出栈)总是从这些新元素开始,即最先添加的元素...
"数据结构--栈和数组--思维导图.pdf" 数据结构是计算机科学中的一个重要概念,栈和数组是数据结构中两个非常重要的概念。本文将对栈和数组进行详细的解释,并提供相关的思维导图。 栈是一个只允许在一端进行插入和...
### 数据结构链式栈知识点详解 #### 一、链式栈概述 链式栈是一种采用链表作为存储结构的栈,其主要特点是不需要预分配存储空间,因此在处理大规模数据时更加灵活。链式栈的基本操作包括:创建空栈、入栈、出栈等...
### 数据结构学习——队列与栈 #### 一、队列的基本概念 队列是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这种操作方式使得队列遵循先进先出(FIFO, First In First Out)的原则。...
栈是一种后进先出(LIFO, Last In First Out)的数据结构,而队列则是先进先出(FIFO, First In First Out)的数据结构。链栈是栈的一种实现方式,它通过链式存储结构来实现栈的功能。 ### 栈的概念与操作 栈是一种...
### 数据结构学习指导知识点梳理 #### 一、数据结构概览 - **研究目的与内容**:数据结构作为计算机科学的基础领域之一,旨在研究如何高效地组织和存储数据,以便于进行快速检索和处理。其核心研究内容包括数据的...
栈是一种特殊的数据结构,遵循“后进先出”(Last In First Out, LIFO)的原则,常用于解决许多算法问题,如括号匹配、递归、深度优先搜索等。在实际编程中,我们通常使用链式存储来实现栈,因为这种结构提供了更大...
数据结构---C语言描述 本资源摘要信息从耿国华的《数据结构---...本资源摘要信息涵盖了数据结构的基本概念、线性表、栈、队列、树、图等数据结构,并提供了相关算法实现,为学习数据结构和C语言提供了有价值的参考。
通过这些基本操作的实践,学生可以深入理解链表的工作原理和操作方式,这不仅有助于掌握链表的实现,还能为后续学习如栈、队列、树等更复杂的数据结构奠定基础。此外,了解链表的优缺点有助于在实际问题中选择合适的...
在`linklist.c`中,我们可能找到链表数据结构的实现,这在实现链式栈和链式队列中是必不可少的。链表节点通常包含数据和指向下一个节点的指针。`linklist.h`可能是链表的头文件,定义了链表节点的数据结构和相关的...
学习链式存储是理解高级数据结构和算法的关键,如栈、队列、哈希表和图等。掌握这些操作对于进行高效的编程至关重要,特别是在处理大量数据或需要动态调整数据结构的场景下。通过模仿和实践这些代码,初学者可以更好...
### 数据结构实验——栈的相关运算知识点详解 #### 一、实验目的 本次实验的主要目的是让学生理解和掌握栈这一数据结构的基本概念及其相关运算方法。具体包括: 1. **理解栈的概念**:栈是一种特殊的线性表,它只...
### 数据结构核心知识点详解 #### 一、绪论 ##### 1. 数据结构与抽象数据类型 - **数据结构**:研究数据元素之间的逻辑关系和物理存储方式。 - **抽象数据类型(ADT)**:对数据...希望对学习数据结构的同学有所帮助。
### Java基础数据结构—栈 #### 一、栈的基本概念 栈作为一种常见的数据结构,在计算机科学领域具有重要的地位。...理解这些知识点对于深入学习数据结构与算法至关重要,同时也是成为一名合格的Java程序员的基础。
本实验旨在通过具体的编程实践,帮助学生深入理解并掌握数据结构中的链表和栈这两种基本的数据结构,同时学会如何利用栈来解决实际问题之一:括号匹配问题。括号匹配问题是编程语言编译器在进行语法分析时经常遇到的...
顺序栈的效率在元素插入和删除时取决于元素的位置,而在链式栈中,这些操作通常只与栈顶元素有关,因此速度较快。然而,顺序栈在空间利用率上可能更优,因为不需要额外的指针结构。 在处理栈溢出问题时,一种策略是...
专升本《数据结构》试卷答案.pdf 数据结构是计算机科学中的...这些知识点涵盖了数据结构的基本概念、数据类型、算法、数据存储结构、线性表、栈、队列、树、图等方面的知识,为学习和研究数据结构提供了基础和参考。