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

数据结构

2016-05-23 16:31 495 查看

数据项入栈和出栈的时间复杂度都为常数O(1).栈操作所耗的时间不依赖于栈中数据项的个数。

栈只允许访问一个数据项:即最后插入的数据项(后进先出),实现方式是数组。在java中,Stack是Vector的子类,它的几个重要的方法是pop,peek,push。

pop方法

/**
移除栈顶的元素,并返回这个元素。
/
public synchronized E pop() {
E       obj;
int     len = size();

obj = peek();
removeElementAt(len - 1);

return obj;
}

public synchronized void removeElementAt(int index) {
modCount++;
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " +
elementCount);
}
else if (index < 0) {
throw new ArrayIndexOutOfBoundsException(index);
}
int j = elementCount - index - 1;
if (j > 0) {
System.arraycopy(elementData, index + 1, elementData, index, j);
}
elementCount--;
elementData[elementCount] = null; /* 把出栈的对应位置的值置为null ,指针下移*/
}


peek()方法

查看栈顶的元素
public synchronized E peek() {
int     len = size();

if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}


push()方法

添加一个元素到栈顶
public E push(E item) {
addElement(item);

return item;
}


队列

数据项入栈和出栈的时间复杂度都为常数O(1).

通常是先进先出(FIFO),如果是优先级队列,会根据提供的比较器或元素的自然顺序进行排序。不管使用哪种排序,队首的元素都可以通过remove或者poll进行移除。先进先出的队列,所有新的元素会被添加到队尾,其他类型的使用不同的添加规则。实现的队列必须要指定排序的规则。

在不违反容量限制的情况下将指定元素添加到队列,如果添加成功返回true,如果没有足够的空间会抛出IllegalStateException异常。
boolean add(E e);


在不违反容量限制的情况下将指定元素添加到队列,当使用容量限制队列,这种方法要优于add(),添加成功返回true,失败则返回false。
boolean offer(E e);


检索并移除队首元素。如果队列为空,会抛出NoSuchElementException异常。
E remove();


检索并移除队首元素。如果队列为空,返回null。
E poll();


检索但是并不删除队首元素,如果队列为空,抛出NoSuchElementException异常。
E element();


检索但是并不删除队首元素,如果队列为空,返回null。
E peek();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: