栈是一种特殊的顺序表,只是从一头进出而已。
下面是一些链栈的基本操作。
/* 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;
}
分享到:
相关推荐
数据结构栈链式存储结构
实现线性表的顺序存储结构、链式存储结构,以及定义在上述结构的基本操作,栈的顺序存储结构、链式存储结构,以及定义在上述结构的基本操作
栈的链式存储思想、数据类型类模板定义、相关操作。
栈的顺序与链式存储结构与操作,已ac过,放心下载
通过单链表方式实现,具有以下功能: 1.创建栈; 2.销毁栈; 3.清空栈; 4.进栈; 5.出栈; 6.获取栈顶元素; 7.获取栈的大小。
栈的链式存储结构的表示和实现实验报告.doc
返回主页上一节下一节3.1.3 栈的链式存储结构链栈就是采用链式存储的栈。C 语言描述:typedef struct LinkNode {所有的操作都在表头进行
栈的链式存储栈的链式存储栈的链式存储栈的链式存储栈的链式存储
假设迷宫由m行n列构成,有一个入口和一个出口,入口坐标为(1,1),出口坐标为(m,n),试找出一条从入口通往出口的最短路径。设计算法并编程输出一条通过迷宫的最短路径或...要求:用栈和队列实现,不允许使用递归算法
前面上传了线性表的顺序存储和链式存储,是为了方便学习数据结构的(喜欢用c语言描述版本)的朋友,现在把栈的顺序存储和链式存储上传,希望为同学们提供一个系统的学习数据结构的地方。
掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现。实验内容:栈的顺序表示和实现编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能。初始化顺序栈插入一个元素删除栈顶...
1、定义栈可以是顺序存取结构或链式存储结构 2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3、定义一个函数用来实现上面问题: 十进制整数 X 和 R 作为形参 初始化栈 只要 X 不为 0 重复做下列动作...
设有一个可停放 N 辆汽车的狭长停车场 , 只有一个大门供车辆出入 。 车辆按到达先后顺序依次从最里面向大门口停放 。 如果已放满 N 辆车 , 再来的车辆只能在大门外的便道上等待 , 一旦有车辆从停车场离开排在便道...
一个较为完整的栈链式存储,包含了很多函数及基础算法。main可运行测试。
(1) 熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现; (2) 熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的...
C语言中栈的顺序存储和链式存储
本资源是属于栈类的实现,包含了seqlist.h,是我总结了老师上课的内容 栈类的实现
链栈是特殊的链表,它限制只能在链表的一端进行插入删除操作,允许操作的一端称为栈顶,另一端称为栈底。本代码包含:创建一个...具体链栈实现的详细分析可参考文章《【数据结构】栈的链式存储:链栈的C语言实现》。