顺序栈即数组型的栈。什么是栈呢?简单来说就像一个刚好装的下乒乓球大小的球筒,假设不能暴力打开球筒且只有一端有出口,那你放入或取出里面的球的操作都只能在一端进行,并且把球放进去或取出来都是由顺序决定的,也就是说你只能从里面没有球或空间足够的时候把球放进去,然后需要的时候再从最外面的那个球拿出一个才能再拿里面的,这就是后进先出(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(栈)的更多相关文章

  1. 数据结构(3):java使用数组模拟堆栈

    堆栈原理: 数组模拟堆栈: //数组模拟栈 class ArrayStack{ //栈顶 private int top = -1; private int maxSize; private int[ ...

  2. java——数组栈 ArrayStack

    栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...

  3. 栈的JS实现

    栈,是一种特殊的线性表,其插入及删除的操作都在线性表的同一端进行.这一端称为栈顶,另一端称为栈底.就类似于餐厅里的一摞盘子,后放的盘子在上方,也会先被人拿走.栈具有"后进先出"的逻 ...

  4. 数据结构图文解析之:栈的简介及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  5. 面试题目——《CC150》栈与队列

    面试题3.1:描述如何只用一个数组来实现三个栈. 方法1:固定分割 方法2:弹性分割(较难) package cc150; public class ArrayStack { public stati ...

  6. 栈的图文解析 和 对应3种语言的实现(C/C++/Java)

    概要 本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例.注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈.内容包括:1. 栈的介绍2. 栈的C实现3. 栈的 ...

  7. 数组实现栈的结构(java)

    自定义数组实现栈的结构. package test; public class MyArrayStackClient { public static void main(String[] args) ...

  8. [数据结构与算法]栈Stack的多种实现

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

随机推荐

  1. springMVC 校验时,CustomValidationMessages.properties中的错误提示信息的中文乱码 问题

    今天在学习springmvc的校验时,遇到了CustomValidationMessages.properties配置文件的信息,才错误提示时是乱码的问题:在网上找了很多方法都没解决:最后原来是在配置 ...

  2. 2019 ICPC南京站网络赛 H题 Holy Grail(BF算法最短路)

    计蒜客题目链接:https://nanti.jisuanke.com/t/41305 给定的起点是S,终点是T,反向跑一下就可以了,注意判负环以及每次查询需要添加边 AC代码: #include< ...

  3. fiddler中文乱码解决方案

    只用添加一个注册表变量就行 cmd窗口执行regedit命令,在弹出的注册表编辑界面找到fiddler 右击新建一个字符传值 HeaderEncodingGBK 结果如上图右所示~ 重启fiddler ...

  4. IntelliJ IDEA 2017.3尚硅谷-----卸载

    直接在用户目录下搜索,卸载的干净就要删除 删除这两个目录,重启idea可以还原配置. editplus删除后重启也是这个效果

  5. Java 动态代理实现

    1.依赖 java.lang.reflect.Proxy - 提供了静态方法去创建动态代理类的实例: Interface InvocationHandler - 一个代理实例调用处理程序实现的接口 2 ...

  6. dist-packages vs site-packages

    dist-packages 和 site-packages的区别 Reference: https://stackoverflow.com/questions/9387928/whats-the-di ...

  7. opencv:像素统计信息

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  8. 攻防世界 robots题

    来自攻防世界 robots [原理] robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在, ...

  9. JAVA基础学习(5)之数组

    5数组 5.1数组 5.1.1初识数组 // 输出大于平均数的所有数 Scanner in = new Scanner(System.in); int n; int[] a = new int[100 ...

  10. netty(八)buffer源码学习3

    问题 : compositeByteBuf 是干什么和其他 compositeByteBuf 有何区别 内部实现 概述 compositeByteBuf 就像数据库中的视图,把几个表的字段组合在一起, ...