Java中栈和队列的概念和使用

一:栈(Stack)
1 概念

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据在栈顶。
Java中栈和队列的概念和使用

2.实现

公司主营业务:做网站、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出青冈免费做网站回馈大家。

  1. 利用顺序表实现,即使用尾插 + 尾删的方式实现
  2. 利用链表实现,则头尾皆可

相对来说,顺序表的实现上要更为简单一些,这里我们优先用顺序表实现栈。

public class MyStack
{ //不考虑扩容问题
private int[] array = new int[100]; 
private int size = 0;
public void push(int v)
{ 
array[size++] = v; 
}
public int pop()
{ 
return array[--size]; 
}
public int peek() 
{
return array[size - 1]; 
}
public boolean isEmpty() 
{ 
return size == 0; 
}
public int size() 
{ 
return size;
}
}`

二:队列(Queue)
1 概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)
Java中栈和队列的概念和使用
2.实现
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

class Node
{
int val;
Node next;
Node(int val, Node next)
{ 
this.val = val; 
this.next = next; 
}
Node(int val) 
{ 
this(val, null); 
}
}
public class MyQueue
{
private Node head = null;
private Node tail = null;
private int size = 0; 
public void offer(int v) 
{ 
Node node = new Node(v, head);
if (tail == null)
{
tail = head;
}
size++; 
}
public int poll() 
{ 
if (size == 0)
{
throw new RuntimeException("队列为空"); 
}
Node oldHead = head;
head = head.next; 
if (head == null)
{ tail = null; 
}
size--; 
return oldHead.val;
}
public int peek()
{
if (size == 0)
{
throw new RuntimeException("队列为空");
}
return head.val;
}
public boolean isEmpty() 
{
return size == 0;
}
public int size()
{ 
return size;
}
}

实际中我们还可能遇到循坏队列:
数组下标循坏的小技巧:

1.1. 下标最后再往后(offset 小于 array.length): index = (index + offset) % array.length

Java中栈和队列的概念和使用

  1. 下标最前再往前(offset 小于 array.length): index = (index + array.length - offset) % array.length
    Java中栈和队列的概念和使用

双端队列 (Deque)
概念
双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。
那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。
Java中栈和队列的概念和使用


本文标题:Java中栈和队列的概念和使用
转载来源:http://pwwzsj.com/article/ieicdo.html