您的位置:首页 > 理论基础 > 数据结构算法

栈和队列数据存储类型---栈(简单了解)

2018-03-22 00:14 387 查看
引言
    数组是前面介绍排序二分查找用的数据存储结构,和后面要遇到学习的其他结构(链表、树等等)一样,都适合用于数据库应用中作数据记录。这些数据结构便于数据的访问:它们易于进行插入、删除和查找特点数据项的操作。

    本篇讲的数据存储类型是栈、队列甚至优先级队列中---栈。这三种数据存储类型它们主要作为构思算法的辅助工具,而不是完全的数据存储工具。这些数据机构的生命周期比那些数据库类型的结构要短的多。在程序操作执行期间它们才被创建,通常用它们去执行某项特殊的任务;当完成任务之后,它们就被销毁。

    栈主要机制可以用数组来实现,本篇实例就是这样处理的,但是也可以用链表来实现。栈只允许访问一个数据项:即最后插入的数据项。移除这个数据项后才能访问倒数第二个插入的数据项,依次类推。这种机制在不少编程环境中都很有用。

    栈先进后出(后进先出),如下图:
    


   以下就是栈简单实现:/**
* 简单栈操作
*
* @author whmAdmin
*
*/
public class Stackx {

private int maxSize; // 元素个数
private long[] stackArray; // 存储数组
private int top; // 堆坐标

/**
* 初始化
* @param s
*/
public Stackx(int s) {
maxSize = s;
stackArray = new long[maxSize];
top = -1;
}

/**
* 添加
* @param i 添加元素
*/
public void push(long i) {
stackArray[++top] = i;
}

/**
* 弹出元素
* @return 元素值
*/
public long pop() {
return stackArray[top--];
}

/**
* 获取元素
* @return
*/
public long peek() {
return stackArray[top];
}

/**
* 是否有元素
* @return
*/
public boolean isEmpty() {
return (top == -1);
}

/**
* 空间是否满了
* @return
*/
public boolean isFull() {
return (top == maxSize - 1);
}

public static void main(String[] args) {
// 初始化数组
int maxValue = 10;
Stackx stackx = new Stackx(maxValue);
// 生产随机数
System.out.println("入栈元素顺序:");
for (int i = 0; i < maxValue; i++) {
long num = (long) ((maxValue + 1) * Math.random()) - (long) (maxValue * Math.random());
System.out.print(num);
System.out.print(" ");
stackx.push(num);
}
System.out.println();
System.out.println("---------------------------------------");
System.out.println("出栈元素顺序:");
while(!stackx.isEmpty()){
long value = stackx.pop();
System.out.print(value);
System.out.print(" ");
}

}
}运行结果:入栈元素顺序:
3 -1 9 2 2 1 2 -1 2 3
---------------------------------------
出栈元素顺序:
3 2 -1 2 1 2 2 9 -1 3 因为是随机数,所以每次元素大小不一样。以上就是简单的栈实现,方便初学者理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 数据结构