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

《大话数据结构》第四章栈与队列

2011-11-04 11:32 225 查看
1.栈是限定仅在表尾进行插入和删除的线性表

允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素的栈称为空栈,栈又称为后进先出的线性表,简称LIFO结构。

1.1 栈的插入操作,叫做进栈,也称压栈,入栈。子弹如弹夹

栈的删除操作,叫做出栈。子弹弹出弹夹

1.2 先进栈的元素是不是只能最后出栈?

答案不一定,如果有3个元素,有5种可能的出栈顺序。

1.3 栈的顺序存储结构和实现

1.3.1 用数组实现栈,下标为0的一端作为栈底较好,大头做栈顶,因为经常要做插入和取出的操作。

1.3.2 我们用一个top的变量指示栈顶元素在数组中得位置,当栈只有一个元素时,top等于0,空栈的top=-1。

1.3.3 栈的结构定义

见后面实现代码

1.3.4 若有一个栈,StackSize是5,请看下图



1.3.5 栈的顺序存储结构——各种操作实现

public class StackDemo {

public static void main(String[] args) {
Stack stack = new Stack(5);
stack.initStack();
}

}

class Stack {
private int[] data = null;
private int capacity; // 栈的容量
private int top; // 栈顶指针

public Stack(int capacity) {
this.capacity = capacity;
}

/*
* 初始化栈
*/
public void initStack() {
data = new int[capacity];
top = -1;
}

/*
* 入栈
*/
public String push(int element) {
if (top == capacity - 1) {
return "ERROR, 栈满";
}

// 先top加1,然后再插入值
top++;
data[top] = element;
return "SUCCESS";
}

/*
* 出栈
*/
public int pop() {
if (top == -1) {
return -1; // 空栈返回-1
}

// 先top减1,然后再返回值
int temp = top;
top--;
return data[temp];
}

/*
* 栈元素个数
*/
public int stackLength() {
if (top == -1) {
return 0;
}
return top + 1;
}

/*
* 判断栈是否为空
*/
public boolean isEmpty() {
if (top == -1) {
return true;
}

return false;
}

// 栈置为空
public void clear() {
this.top = -1;
}

/*
* 从栈底开始打印所有元素
*/
public void print() {
for (int i : data) {
System.out.print(i + " ");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: