#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++实现)有:线性表,顺序表,顺序栈,链式栈。此代码供大家学习参考!
这些程序都是本人在复习数据结构中自己写的,都是可以运行的,对学习数据结构绝对有好处
- 3-2 链式栈 - 3-3 最大栈 ## 队列 - 4-1 顺序队列 - 4-2 链式队列 - 4-3 循环队列 ## 树 - [5-1 树的基本操作](utils.py) - [5-2 二叉树](5.2_binaryTree.py) - [5-3 二叉堆](5.3_binaryHeap.py) - [5-4 二叉...
在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C++语言为描述工具的多种教材版本。本教实验指导书是为已经学习过C++语言的...
数据结构与算法课程内容包括数据结构与抽象数据类型、算法特性及分类、算法效率与度量、线性结构、顺序表、链表、栈与队列、栈与递归、递归转非递归、字符串的存储结构、字符串运算的算法实现、字符串的快速模式匹配...
学习数据结构目的是要熟悉一些最常用的数据结构,明确数据结构内在的逻辑关系,知道它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各种操作时的动态性质及实际的执行算法,进一步提高软件计和编程水平...
在我国学习计算机的人中很少有不知道谭浩强教授的。他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校...
《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参考教材。本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的...
《数据结构》(c语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的...
能学到什么:这是一种功能受限的表结构,通过学习该链式表的入出入原理,有助于深入理解数据结构,为后续的框架学习等有很大帮助。 阅读建议:想要能够看懂此类代码需要掌握一定的高级c语言,尤其是结构体的访问、...
《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的...
数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺。...按照链表、栈、队列、排序、数组、树这种顺序来学习数据结构
数据结构 教案 电子文档 基础学习资料 内容 要求 方法及手段 学时分配 第一章 绪论 2 数据结构的基本概念、学习数据结构的目的 算法定义及算法分析初步 属基本内容,应牢固掌握 多媒体课件 1 1 第二章 线性表 ...
大连东软信息学院的学习平台的数据结构PPT文件,已打包,有需要的的话可以直接下载。压缩包内文件: 01课程介绍和绪论.pptx 02线性表的定义&顺序表表示和实现.pptx 03顺序表实现&链式表的基本概念.pptx 04链式表表示...
此项目是基于java语言的关于数据结构的代码实现,包含所有经典数据结构算法,并且注释完善,非常适合了解和学习数据结构。另外包含了一个联系人存储工具(phonebook),它由swing展示,并应用了数据结构算法的相关概念...
《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。 本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和...
链式栈.mp4 19.链式队列.mp4 20.基数排序.mp4 21.树.mp4 22.二叉树的存储表示与实现.mp4 23.二叉树的遍历.mp4 24.二叉查找树.mp4 25.红黑树.mp4 26.堆.mp4 27.堆排序.mp4 28.哈希表.mp4 29.图_邻接矩阵....