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

    #include <iostream> using namespace std; class Obj { private: int* a; public: int* ga() { retu ...

  2. python中pip问题

    1.在cmd中运行pip命令显示‘pip命令显示不是内部或外部命令,也不是可运行的程序或批处理文件’的问题 先看python的安装目录下Script文件夹中pip3.exe有没有缺失 如果没有在cmd ...

  3. 【二叉搜索树】的详细实现(C++)

    二叉搜索树的概念 从前面讨论折半搜索的性能中可知,如果每次从搜索序列的中间进行搜索,把区间缩小一半,通过有限次迭代,很快就能通近到所要寻找的元素.进一步,如果我们直接输入搜索序列,构造出类似于折半搜索 ...

  4. BFS与食物链条数

    最近学校生物在教能量流动,因此离不开食物网,也就离不开食物链. 那么问题来了,给出食物网(DAG),怎么求食物链条数呢? 怎么来的?首先,找到同时被2个以上生物捕食的被捕食者,求出:能量来源X(能量去 ...

  5. Django组件总结

    Django组件介绍 分页器的使用 分页器在页面中非常常见,当数据库条数数据过多时,页面一次性显示不好看时,我们可以使用分页器,将数据分几次显示. 1.1 数据库内插入大量数据 Booklist=[] ...

  6. Spring-Bean的后置处理器

    Spring——Bean 后置处理器 Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理. BeanPostProcessor 接口定义回调方法,你可以实现该方法来提供自己的实例 ...

  7. layuiAdmin std v1.x 【iframe版】开发者文档

    layuiAdmin pro v1.x [单页版]开发者文档 layuiAdmin.std(iframe 版) 是完全基于 layui 架构而成的通用型后台管理模板系统,采用传统的 iframe 多页 ...

  8. python GIL锁与多cpu

    多核CPU   linux : cat /proc/cpuinfo 如果你不幸拥有一个多核CPU,你肯定在想,多核应该可以同时执行多个线程. 如果写一个死循环的话,会出现什么情况呢? 打开Mac OS ...

  9. 吴裕雄 python 神经网络——TensorFlow 训练过程的可视化 TensorBoard的应用

    #训练过程的可视化 ,TensorBoard的应用 #导入模块并下载数据集 import tensorflow as tf from tensorflow.examples.tutorials.mni ...

  10. (学习1)最小生成树-Prim算法与Kruskal算法

    最小生成树: 求一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 1:Prim算法(适合稠密图) 伪代码: Prim(G){ //G ...