数据结构自己实现——stack
#define StackSize 100
typedef char DataType; class stack
{
public:
DataType data[StackSize];
int top; void Initial();
bool IsEmpty();
bool IsFull();
void Push(DataType x);
DataType Pop();
DataType Top();
};
stack.cpp
#include "stack.h"
#include <iostream>
using namespace std; void stack::Initial()
{
top = -1;
} bool stack::IsEmpty()
{
return top == -1;
} bool stack::IsFull()
{
return top == StackSize -1;
} void stack::Push(DataType x)
{
if(IsFull() == true )
{
cout<< "栈?已??满??" <<endl;
}
else
{
top++;
data[top] = x;
}
} DataType stack::Pop()
{
if(IsEmpty() == true )
{
cout<< "栈?为a空?" <<endl;
}
else
{
DataType temp;
temp = data[top];
top--;
return temp;
}
} DataType stack::Top()
{
if(IsEmpty() == true )
{
cout<< "栈?为a空?" <<endl;
}
else
{
DataType temp;
temp = data[top];
return temp;
}
} LinkStack.h
typedef char DataType;
typedef struct node
{
DataType data;
struct node *next;
}StackNode;
class LinkStack
{
public:
StackNode *top; void Initial();
bool IsEmpty();
void Push(DataType x);
DataType Pop();
DataType Top(); }; LinkStack.cpp
#include "LinkStack.h"
#include <iostream>
using namespace std; void LinkStack::Initial()
{
top = NULL;
}
bool LinkStack::IsEmpty()
{
return top == NULL;
}
void LinkStack::Push(DataType x)
{
StackNode *temp=(StackNode *)malloc( sizeof(StackNode)); //不?可??以??直??接??StackNode *temp;
temp->data = x;
temp->next = NULL;
//注???意?a栈?的??插?入?? 指?针?指?向??方??式??
temp->next = top;
top = temp;
} DataType LinkStack::Pop()
{
DataType x;
StackNode *temp = top; //保???留??栈?顶??指?针?
if(IsEmpty())
{
cout<< "栈?为a空?" <<endl;
}
else
{
x = temp->data;
top = temp->next;
free(temp);
return x;
}
}
DataType LinkStack::Top()
{
DataType x;
StackNode *temp = top; //保???留??栈?顶??指?针?
if(IsEmpty())
{
cout<< "栈?为a空?" <<endl;
}
else
{
x = temp->data;
return x;
}
} main.cpp
#include <stdio.h>
#include <iostream>
#include "stack.h"
#include "LinkStack.h"
using namespace std; int main()
{
//printf("Hello\n");
//stack mystack;
//mystack.Initial();
//mystack.Push('a');
//cout<<mystack.Top()<<endl;
//mystack.Push('b');
//cout<<mystack.Top()<<endl;
//cout<<mystack.Pop()<<endl;
//cout<<mystack.Pop()<<endl;
//mystack.Pop(); LinkStack mylinkstack;
mylinkstack.Initial();
mylinkstack.Push( 'x'); cout<<mylinkstack.Top()<<endl;
mylinkstack.Push( 'y');
cout<<mylinkstack.Top()<<endl;
cout<<mylinkstack.Pop()<<endl;
cout<<mylinkstack.Pop()<<endl;
mylinkstack.Pop();
return 0;
}
数据结构自己实现——stack的更多相关文章
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
- C++数据结构之Linked Stack(链式栈)
上一节用连续的方式实现栈,这种方法用一个确定大小的数组存储栈元素,因为当存储达到数组上限时会遇到麻烦. 连续实现的栈与链式实现的栈的最大不同在于,前者使用一个确定大小的数组存储每一个栈元素,后者使用带 ...
- 数据结构学习笔记——stack实现(数组篇)
一 栈:是一种表,限制插入和删除只能在一个位置,也即是表的末端(也是栈的顶)进行. 基本操作:push 和 pop. 二 栈的数组实现: 运用数组来存储元素,和栈操作先关的是theArray(一个数组 ...
- Python数据结构应用1——Stack
Reference: Problem Solving with Algorithms and Data Structures, Release 3.0 自学一下数据结构,学完之后刷leetcode,使 ...
- 数据结构11: 栈(Stack)的概念和应用及C语言实现
栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- java数据结构——栈(Stack)
学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...
- 数据结构 -- 栈(Stack)
一.栈的简介 定义 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据 ...
- 第二十三篇 玩转数据结构——栈(Stack)
1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元 ...
- 数据结构之栈(Stack)
什么是栈(Stack) 栈是一种遵循特定操作顺序的线性数据结构,遵循的顺序是先进后出(FILO:First In Last Out)或者后进先出(LIFO:Last In First Out). 比如 ...
随机推荐
- Linux - which xxx - 查找执行的命令所在的路径
Linux 下,我们常使用 cd ,grep,vi 等命令,有时候我们要查到这些命令所在的位置,如何做呢? Linux 下有2个命令可完成该功能:which ,whereis which 用来查看当 ...
- MySQL8.0.12安装及配置
一.下载 下载页面http://dev.mysql.com/downloads/mysql/ 选择系统平台后,点击download(根据系统选择64或32位) 二.配置 1.下载成功后,解压安装包到要 ...
- ipvsadm启动报错解决方法
Centos7 yum -y install ipvadm 安装后,启动ipvsadm却报错. Redirecting to /bin/systemctl start ipvsadm.service ...
- DC课程目标
- 有关Kali更新问题的解决方法。
近期更新源遭遇诸多不顺,无非是各种依赖问题的报错夹杂着各种稀奇古怪的问题,不过既然是玩Linux,就要做好处理各种疑难杂症的准备.经过了这几天的不断尝试,今天终于解决了更新出错的问题. 本人更新源出现 ...
- JavaSE——final修饰符
一.final 修饰变量,被final修饰的变量在被赋初始值之后,不能对它重新赋值 修饰实例变量,必须显示指定初始值,可以在三个位置指定初始值: 1.定义final实例变量时指定初始值 ...
- 排序 sort函数
sort函数见下表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partia ...
- 《Scrum实战》第2次课【取得大家的支持】课后作业汇总
作业:<变革之心>读后感 孟帅: 2017-7-12http://www.cnblogs.com/mengshuai1982/p/7153985.html
- python学习-- {% csrf_token %}
1.不推荐禁用掉django中的CSRF. 2.我们可以再html页面的form表单中添加csrf_token,带着表单的请求一起发送到服务器去验证. <form enctype=" ...
- 使用 D8 分析 javascript 如何被 V8 引擎优化的
在上一篇文章中我们讲了如何使用 GN 编译 V8 源码,文章最后编译完成的可执行文件并不是 V8,而是 D8.这篇我们讲一下如何使用 D8 调试 javascript 代码. 如果没有 d8,可以使用 ...