Java中栈和队列的概念和使用-创新互联

一:栈(Stack)
1 概念

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

2.实现

成都创新互联是一家网站设计制作、成都网站设计,提供网页设计,网站设计,网站制作,建网站,按需定制开发,网站开发公司,公司2013年成立是互联行业建设者,服务者。以提升客户品牌价值为核心业务,全程参与项目的网站策划设计制作,前端开发,后台程序制作以及后期项目运营并提出专业建议和思路。
  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中栈和队列的概念和使用

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:Java中栈和队列的概念和使用-创新互联
文章出自:http://myzitong.com/article/icjos.html