#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的更多相关文章

  1. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  2. C++数据结构之Linked Stack(链式栈)

    上一节用连续的方式实现栈,这种方法用一个确定大小的数组存储栈元素,因为当存储达到数组上限时会遇到麻烦. 连续实现的栈与链式实现的栈的最大不同在于,前者使用一个确定大小的数组存储每一个栈元素,后者使用带 ...

  3. 数据结构学习笔记——stack实现(数组篇)

    一 栈:是一种表,限制插入和删除只能在一个位置,也即是表的末端(也是栈的顶)进行. 基本操作:push 和 pop. 二 栈的数组实现: 运用数组来存储元素,和栈操作先关的是theArray(一个数组 ...

  4. Python数据结构应用1——Stack

    Reference: Problem Solving with Algorithms and Data Structures, Release 3.0 自学一下数据结构,学完之后刷leetcode,使 ...

  5. 数据结构11: 栈(Stack)的概念和应用及C语言实现

    栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...

  6. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  7. java数据结构——栈(Stack)

    学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...

  8. 数据结构 -- 栈(Stack)

    一.栈的简介 定义 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据 ...

  9. 第二十三篇 玩转数据结构——栈(Stack)

          1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元 ...

  10. 数据结构之栈(Stack)

    什么是栈(Stack) 栈是一种遵循特定操作顺序的线性数据结构,遵循的顺序是先进后出(FILO:First In Last Out)或者后进先出(LIFO:Last In First Out). 比如 ...

随机推荐

  1. MHA

    MHA 1. MHA简介 1.1 MHA工作原理总结为如下 1.2 MHA工具包介绍 2. 部署MHA 2.1 环境介绍 2.2 一主两从复制搭建 2.3 配置互信 2.4 下载MHA 2.5 安装M ...

  2. Unity基础-图形渲染

    图形渲染-Camera Camera下的Clear Flags:Skybox,Don't Clear,Depth only(深度),Solid Color(固定颜色) Culling Mask:渲染层 ...

  3. 如何用纯 CSS 创作一个文本淡入淡出的 loader 动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ERwpeG 可交互视频 ...

  4. gdb调试时查看内存

    x/<n/f/u> <addr> n.f.u是可选的参数,<addr>表示一个内存地址 1) n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地 ...

  5. 针对NM_CUSTOMDRAW消息的学习

    消息的形式:1 窗口消息,2 命令消息,3 WM_NOTIFY消息,4 自定义消息 我们的NM_CUSTOMDRAW消息就是就属于第三种WM_NOTIFY消息,而添加消息映射的方法分为两种: BEGI ...

  6. 03011_HttpServletRequest

    1.HttpServletRequest概述 (1)我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代 ...

  7. STL学习笔记1--vector

    C++STL(Standard Template Library)标准模板库是通用类模板和算法的集合.包含一些标准的数据结构的实现如queues(队列),lists(链表),stacks(栈)等.ST ...

  8. const用法归纳总结 C++

    非常好的一篇分析const的总结归纳, 在此谢谢原作者:http://blog.csdn.net/zcf1002797280/article/details/7816977 在普通的非 const成员 ...

  9. Leetcode25--->Reverse Nodes in k-Group(以k个节点为段,反转单链表)

    题目: 给定一个单链表,一次反转k个节点,最终返回翻转后的链表的头节点:如果链表不足k个,则不变 举例: Given this linked list: 1->2->3->4-> ...

  10. Leetcode24--->Swap Nodes in Pairs(交换单链表中相邻的两个节点)

    题目:给定一个单链表,交换两个相邻的节点,且返回交换之后的头节点 举例: Given 1->2->3->4, you should return the list as 2-> ...