数据结构自己实现——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). 比如 ...
随机推荐
- 201621123080 《Java程序设计》第13周学习总结
201621123080 <Java程序设计>第13周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能( ...
- 关于stm32优先级大小的理解
转载自:https://www.cnblogs.com/ZKeJun/p/6112591.html 一. 组别:0>1>2>3>4 组别优先顺序(第0组优先级最强,第4组优 ...
- nslookup、dig命令Linux安装包
linux下提供nslookup,dig命令的软件就是 bind-utils yum install bind-utils -y
- Ubuntu添加环境变量
在 Ubuntu 系统中有两种设置环境变量 PATH 的方法.第一种适用于为单一用户设置 PATH,第二种是为全局设置 PATH. 第一种方法: 在用户主目录下有一个 .bashrc 文件,可以在此文 ...
- configurationChanges
在Android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置.在activity加上android:c ...
- Apache 根据不同的端口 映射不同的站点
以前,在本地新建个项目,总是在Apache的htdocs目录下新建个项目目录,今年弄了个别人写好的网站源码,因为该系统的作者假定网站是放在根目录的,放在二级目录下会出错.所以无奈,只能想办法,根据端口 ...
- Leetcode36--->Valid Sudoku(判断给定的数独是否有效)
题目:给定一个数独,某些部分已经被填上了数字,其余空的地方用‘.’表示:判断给定的数独是否有效: 数独规则: 每一行不能有重复的数字:每一列不能有重复的数字:将数独框划分为三行三列,没9个小方格不能有 ...
- aiomysql inserting operation failed !
emotions: those days,i am using aiomysql(python3.5) to acess my database .But a 'strange' problem ma ...
- Ruby 符号【转】
Ruby的符号足以让很多初学者迷惑上一段时间,看过本章节后,或许会解开你心中的疑惑. 在Ruby中,一个符号是就是一个Symbol类的实例,它的语法是在通常的变量名前加一个冒号,如 :my_sy Ru ...
- 【软件工程】Word frequency program
一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,对于C++也不熟,所以打算先花1天的时间学习C# 2.整个程序基本分为文件遍历.单词提取.单词匹配.排序.输出几个模块,各个模块大致时间 ...