数据结构自己实现——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). 比如 ...
随机推荐
- mysql基本知识点
1.建表格式:create table 表名(字段名 约束条件,字段名 约束条件,...);示例:create table brand(brand_id int unique primary key, ...
- 控制nginx并发链接数量和客户端请求nginx的速率
一.控制nginx并发链接数 ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数. 不是所有的链接数都会被计数,一个符合计数要求的连接 ...
- python入门:用户登录,三次错误机会
#!/usr/bin/env python # -*- coding:utf-8 -*- #用户登录,三次机会重试 #主要分为两个部分,一部分是写三次循环,一部分写用户输入 #用户登录的实现,循环3次 ...
- 配置wamp开发环境
新手在PHP网站建设时,会使用使用PHP的集成开发环境,这样利于开发和理解!但是做为一个网站开发人员,会独立的配置开发环境这是必须的……因为集成的环境毕竟是固定的,不利于自己的开发.好,废话少说咱现在 ...
- 如何生成带注释的DLL文件
背景: 实际上并不是生成带有注释的DLL文件,而是同时生成一个XML文件,用来显示注释. 为什么要使用DLL文件,在C#编程的过程中,一直在使用DLL文件,如System.dll 方法: 1,创建类库 ...
- JAVA-基础(一)
1.一个变量可以声明为final,这样做的目的是阻止它的内容被修改.这意味着在声明final 变量的时候,你必须初始化它(在这种用法上,final类似于C/C++中的const). 例如: final ...
- luogu3381 【模板】最小费用最大流
每次选代价最小的流增广 #include <iostream> #include <cstring> #include <cstdio> #include < ...
- 使用MySQLWorkBench连接数据库
在日常使用中,经常使用命令行去连接MySQL数据库不方便,推荐使用MySQLWorkBench去远程连接进行管理,下面记录一下使用步骤: 1. 安装MySQLWorkBench后,界面如下,点击“+” ...
- 理解Tomcat架构、启动流程及其性能优化
PS:but, it's bullshit ! 备注:实话说,从文档上扒拉的,文档地址:在每一个Tomcat安装目录下,会有一个webapps文件夹,里面有一个docs文件夹,点击index.html ...
- 简单实用jstl实现“登录|注册”
package com.ceshi; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.s ...