栈
栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。
栈顶(Top):线性表允许进行插入删除的那一端。
栈底(Bottom):固定的,不允许进行插入和删除的另一端。
空栈:不含任何元素的空表
栈的特性:
(1)把允许插入的一端称为栈顶(top),对应的另一端称为栈底(bottom)
. (2)如果栈里面不含任何元素那么我们称之为空栈
(3)栈是又称为一种先进后出(Last In First Out)的线性表,简称LIFO结构
注意:
栈是一种特殊的线性表,(栈的元素具有线性关系,既前驱和后继关系。定义中讲到栈的插入和删除表尾进行插入和删除查找,这里的表尾是指栈顶,而不是栈底)
栈的特殊之处在于给线性表加了一些规矩既:栈这种线性表的插入和删除只能在栈顶进行,而不是栈底
对栈的操作
栈的插入叫:进栈也叫压栈或者入栈
栈的删除叫:出栈或者弹出
java中对栈的常见操作
入栈
public void add(int data)
{
if(this.size==this.arr.length)
{
arr=Arrays.copyOf(arr,arr.length*2);
}
arr[size]=data;
size++;
}`public int peek()
{
if(empty())
{
throw new EmptyException("栈为空,无栈顶元素!");
}
return arr[size-1];
}`
出栈
public void pop()
{
if(empty())
{
throw new EmptyException("栈为空,无法删除!");
}
size--;
}
取栈顶元素
public int peek()
{
if(empty())
{
throw new EmptyException("栈为空,无栈顶元素!");
}
return arr[size-1];
}
判断栈是否为空
public boolean empty()
{
return this.size==0;
}
栈的有效元素
public int usedSize()
{
return usedSize;
}
以下是所有代码
public class MySenondStack
{
int size;
int[] arr;
public MySenondStack()
{
arr=new int[10];
}
public void add(int data)
{
if(size==arr.length)
{
arr= Arrays.copyOf(arr,arr.length*2);
}
arr[size]=data;
size++;
}
public void pop()
{
if(empty())
{
throw new EmptyException("空了");
}
size--;
}
public boolean empty()
{
return size==0;
}
public int peek()
{
if(empty())
{
throw new EmptyException("空了");
}
return arr[size-1];
}
}