栈是一种特殊的顺序表,只是从一头进出而已。
下面是一些链栈的基本操作。
/* linkstack.h */
#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED
#include <iostream>
using namespace std;
#define TYPE int
typedef struct _Node {
TYPE data;
struct _Node* next;
} Node, *Pnode;
class LinkStack
{
private:
Pnode base;
Pnode top;
public:
LinkStack();
~LinkStack();
bool InitStack();
void DestroyStack();
bool ClearStack();
bool StackEmpty();
int StackLength();
bool Pop(TYPE&);
bool Push(TYPE);
void StackTraverse();
};
#endif // LINKSTACK_H_INCLUDED
/* linkstack.cpp */
#include "linkstack.h"
LinkStack::LinkStack() {
base = NULL;
top = NULL;
}
LinkStack::~LinkStack() {
}
bool LinkStack::InitStack() {
if (base) {
cout<<"alarm! stack exist"<<endl;
return false;
}
base = new Node;
if (base) {
top = base;
return true;
}
return false;
}
void LinkStack::DestroyStack() {
while (top) {
Pnode p = top;
top = top->next;
delete p;
}
base = NULL;
}
bool LinkStack::ClearStack() {
if (!base) {
cout<<"alarm! stack not exist"<<endl;
return false;
}
while (top != base) {
Pnode p = top;
top = top->next;
delete p;
}
return true;
}
bool LinkStack::StackEmpty() {
if (!base) {
cout<<"alarm! stack not exist"<<endl;
}
//判断栈为空
if ((top == base) && (top != NULL)) {
return true;
}
return false;
}
int LinkStack::StackLength() {
if (!base) {
cout<<"alarm! stack not exist"<<endl;
return 0;
}
int n = 0;
Pnode p = top;
while (p != base) {
p = p->next;
n++;
}
return n;
}
bool LinkStack::Push(TYPE data) {
Pnode p = new Node;
if (p) {
p->data = data;
p->next = top;
top = p;
return true;
}
return false;
}
bool LinkStack::Pop(TYPE &e) {
if (top==base) {
cout<<"error! operation fail, do not to Pop(), Maybe the STACK is empty or not exist"<<endl;
return false;
}
e = top->data;
Pnode p = top;
top = top->next;
delete p;
return true;
}
void LinkStack::StackTraverse() {
if (!base) {
cout<<"alarm! stack not exist"<<endl;
return;
}
Pnode p = top;
while (p!=base) {
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
分享到:
相关推荐
在给定的文件列表中,"StackLink.cpp"很可能包含了栈链式存储结构的C++实现代码。通常,`.cpp`文件是用来编写C++源代码的。在这个文件中,可能定义了一个栈类,该类使用链表作为底层数据结构,包含push(入栈)、pop...
同时,我们还会涉及栈这种特殊类型的线性表及其顺序和链式存储结构。 一、线性表的顺序存储结构 顺序存储结构是最简单也是最直观的一种数据存储方式,它将线性表中的元素依次存储在一片连续的内存空间中。每个元素...
本实验报告详细介绍了线性表的链式存储结构,通过编程实践深入理解了链表的逻辑结构、基本操作以及链表算法的实现过程。 线性表作为一种常见的数据结构,其特点是元素之间存在一对一的线性关系。线性表中数据元素...
链式存储结构是栈的一种实现方式,相比数组实现,它具有更大的灵活性,特别是在动态调整容量时。 本篇将详细介绍如何使用C语言通过单链表来实现栈的功能。首先,我们需要定义一个链表节点结构体,它包含一个数据域...
线性表的链式存储结构在计算机科学中是一种常见的数据结构,它用于组织和操作一组具有线性顺序的元素。在这种结构中,每个元素都称为节点,每个节点包含数据和指向下一个节点的引用。链式存储与数组不同,因为数组中...
### 栈的顺序与链式存储结构与操作 #### 标题解读 本文主要讨论了栈数据结构的两种实现方式:顺序存储结构和链式存储结构,并提供了具体的代码实现。 #### 描述解析 该描述表明文章提供的代码已经通过了相关的测试...
实验报告的主题是“线性表的链式存储结构”,它主要涵盖了线性表的基本概念、链式存储方式以及相关的操作,如初始化、插入、删除、查找等。线性表是一种基本的数据结构,它是由n(n>=0)个相同类型元素构成的有限...
链式存储结构堆栈是一种在计算机科学中常用的数据结构,特别是在C语言编程中。相比于数组实现的静态堆栈,链式堆栈具有更大的灵活性,因为它不依赖预先分配的固定空间,而是通过链接节点动态地扩展和收缩。在这个...
链式存储是实现栈的一种有效方式,相比数组存储,它具有动态扩展的优势,不需预估容量,可以更灵活地处理数据。 链式存储的栈通常由一系列节点组成,每个节点包含数据和指向下一个节点的指针。栈顶指针指向栈顶元素...
本章主要探讨的是两种常用且基础的数据结构——栈(Stack)和队列(Queue),以及它们的两种基本存储方式:顺序存储结构(Sequential Storage Structure)和链式存储结构(Linked Storage Structure)。我们将深入...
本章将深入探讨两种重要的数据结构——栈和队列,以及它们的两种常见存储方式:顺序存储结构和链式存储结构。 栈(Stack)被称为“后进先出”(Last In, First Out,简称LIFO)的数据结构。栈的操作主要围绕两个...
栈的链式存储结构的表示和实现实验报告.doc
返回主页上一节下一节3.1.3 栈的链式存储结构链栈就是采用链式存储的栈。C 语言描述:typedef struct LinkNode {所有的操作都在表头进行
在C#中,我们可以使用多种方式来实现栈,其中链式存储是一种常见且灵活的方法。下面我们将深入探讨如何使用C#编写链式存储的栈,并通过`LinkedStackTest`这个例子来理解其实现细节。 首先,栈的基本操作包括压入...
在栈链式存储中,每个元素被称为节点,每个节点包含两个部分:数据域和指针域。数据域用于存储实际的数据,而指针域则指向下一个节点。栈顶指针(top)始终指向栈顶元素,当没有元素时,栈顶指针为空。栈的基本操作...
在这个主题中,我们将专注于两种重要的数据结构实现:栈的顺序存储和链式存储。栈是一种特殊的数据结构,被称为“后进先出”(LIFO)结构,这意味着最后进入的元素将首先被取出。这种特性使得栈在许多算法和程序设计...
总结起来,栈的链式存储是一种高效且灵活的数据结构实现方式,它允许动态扩展,具有较高的空间效率,并能快速执行基本操作。在编程实践中,掌握链式栈的原理和实现对于解决复杂问题有着重要的作用。