ArrayStack(栈)
顺序栈即数组型的栈。什么是栈呢?简单来说就像一个刚好装的下乒乓球大小的球筒,假设不能暴力打开球筒且只有一端有出口,那你放入或取出里面的球的操作都只能在一端进行,并且把球放进去或取出来都是由顺序决定的,也就是说你只能从里面没有球或空间足够的时候把球放进去,然后需要的时候再从最外面的那个球拿出一个才能再拿里面的,这就是后进先出(LILO - last in last out),栈的原理就是这么回事。其本质基本上就是一个顺序储存结构,也就是一个线性表,所以栈是前驱后继的关系的线性结构。人们口中常说的堆栈一般就是指栈,而不是堆和栈。
栈的应用也很重要,比如做递归的时候就是一个栈的原理、符号的匹配问题、后缀表达式等等。
code:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h> #define EmptyToStack -1
#define MAXSIZE 500 #define TRUE 1
#define FALSE 0; typedef int ElemType;
typedef int Status; typedef struct
{
ElemType * data;
int top;
}Stack; Stack * CreateStack();
Status IsEmpty();
Status IsFull();
Status Push();
Status Pop();
int Top();
int StackLength(); Stack * CreateStack(void)
{
Stack * S;
S = (Stack *)malloc(sizeof(Stack));
S -> data = (ElemType *)malloc(sizeof(ElemType));
S -> top = EmptyToStack;
return S;
} Status IsEmpty(Stack * S)
{
return S -> top == EmptyToStack;
} Status IsFull(Stack * S)
{
return S -> top == MAXSIZE;
} Status Push(Stack * S, ElemType Elem)
{
if(IsFull(S))
return FALSE;
S -> data[++ S -> top] = Elem;
return TRUE;
} Status Pop(Stack * S)
{
if(IsEmpty(S))
return FALSE;
S -> top --;
return TRUE;
} int Top(Stack * S)
{
return S -> top;
} int StackLength(Stack * S)
{
return S -> top + 1;
} int main(void)
{ ElemType e;
Stack * p;
char c;
int i; p = CreateStack(); puts("1) 进栈 2) 出栈");
puts("3) 遍历栈 4) 返回栈顶元素");
puts("5) 清空栈 6) 当前栈的长度");
puts("q) 退出");
while((c = getch()) != 'q')
{
if(c == '1')
{
puts("请输入数据:");
scanf("%d",&e);
Push(p, e);
}
if(c == '2')
{
puts("当前栈顶元素为:");
printf("%d\n",p -> data[Top(p)]); Pop(p); puts("当前栈顶元素为:");
printf("%d\n",p -> data[Top(p)]);
}
if(c == '3')
{
puts("显示数据:");
for(i = Top(p); i > EmptyToStack; i--)
{
printf("%d -> ",p -> data[i]);
}
printf("NULL\n");
}
if(c == '4')
{
puts("当前栈顶元素为:");
printf("%d\n",p -> data[Top(p)]);
}
if(c == '5')
{
do Pop(p);
while(p -> top != EmptyToStack); if(!IsEmpty(p))
puts("ERROR!\n");
}
if(c == '6')
{
printf("当前栈长: %d\n",StackLength(p));
}
}
return 0;
}
ArrayStack(栈)的更多相关文章
- 数据结构(3):java使用数组模拟堆栈
堆栈原理: 数组模拟堆栈: //数组模拟栈 class ArrayStack{ //栈顶 private int top = -1; private int maxSize; private int[ ...
- java——数组栈 ArrayStack
栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...
- 栈的JS实现
栈,是一种特殊的线性表,其插入及删除的操作都在线性表的同一端进行.这一端称为栈顶,另一端称为栈底.就类似于餐厅里的一摞盘子,后放的盘子在上方,也会先被人拿走.栈具有"后进先出"的逻 ...
- 数据结构图文解析之:栈的简介及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- 面试题目——《CC150》栈与队列
面试题3.1:描述如何只用一个数组来实现三个栈. 方法1:固定分割 方法2:弹性分割(较难) package cc150; public class ArrayStack { public stati ...
- 栈的图文解析 和 对应3种语言的实现(C/C++/Java)
概要 本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例.注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈.内容包括:1. 栈的介绍2. 栈的C实现3. 栈的 ...
- 数组实现栈的结构(java)
自定义数组实现栈的结构. package test; public class MyArrayStackClient { public static void main(String[] args) ...
- [数据结构与算法]栈Stack的多种实现
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
随机推荐
- python-第三方库的理解及某个函数的源代码
第三方库,是一个总称,里面有各个模块,而具体使用的函数是模块里的. 库包含多个模块, 每个模块里包含多个函数. import AAAA 就是引用AAAA这个库,这个库里的模块函数都可以用,只是 ...
- java1.8特性
java1.8特性 1.lambda表达式 Java8为集合类引入了另一个重要概念:流(stream).一个流通常以一个集合类实例为其数据源,然后在其上定义各种操作 例如 .filter .forEa ...
- 【红黑树】的详细实现(C++)
红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树.红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键 ...
- opencv:二值图像的概念
灰度图像与二值图像 二值分割 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; usi ...
- sql server获取查询时间
declare @d datetime set @d=getdate() /*你的SQL脚本开始*/ /*你的SQL脚本结束*/ select [语句执行花费时间(毫秒)]=datediff(ms,@ ...
- mysql 导出sql文件
1:find / -name mysqldump -print 先找到mysqldump 目录位置 2:/usr/local/mysql/bin/mysqldump -u root -p hanwe ...
- 「CSP-S模拟赛」2019第二场
目录 T1 Jam的计数法 题目 考场思路(正解) T2 「TJOI / HEOI2016」排序 题目 考场思路(假正解) 正解 T3 「THUWC 2017」随机二分图 题目 考场思路 正解 这场考 ...
- VS Code的git配置
最近打算使用VS Code作为python的编辑器,这里记录一下VS Code中git的配置方法 因为vscode中git只是使用本地的git,所以本地必须先安装git才行. 1.git的安装 git ...
- Jmeter_选项_函数助手对话框_CSVRead
1.之前有写过Jmeter_请求原件之参数化CSV 2.这次是使用函数助手 CSVRead去进行处理 3.作用注册10个账户 4.线程组设置,10个线程进行,因为是注册10个账户,如果线程设置为1,循 ...
- 学习笔记(24)- plato-训练中文模型
先处理中文语料.参考上篇笔记 1. 准备model_definition_file文件 官方文档给了例子, plato/example/config/ludwig/metalWOZ_seq2seq_l ...