1、基本概念:
栈(stack)是一种后进先出(last in first out,LIFO)的数据结构。
队列(queue)是一种先进先出(first in first out,FIFO)的结构。如下图所示:
2、实现:
(1)栈(stack)的链表实现
首先定义一个内部类来保存每一个链表的节点,该节点包括当前的值以及指向下一个的值,然后建立一个节点保存位于栈顶的值以及记录栈的元素个数。
代码实现:
class Node{
public T Item {get;set;}
public Node Next {get;set;}
}
private Node first = null;
private int number = 0;
现在来实现push方法---即向栈顶压入一个元素,保存原先的位于栈顶的元素,然后新建一个新的栈顶元素,将该元素的下一个指向原先的栈顶元素。整个Pop过程如下:
实现代码:
Pop方法也很简单,首先保存栈顶元素的值,然后将栈顶元素设置为下一个元素:
代码实现:
栈的数组实现:可以使用数组来存储栈中的元素Push的时候,直接添加一个元素S[N]到数组中,Pop的时候直接返回S[N-1].
首先,我们定义一个数组,然后在构造函数中给定初始化大小,Push方法实现如下,就是集合里添加一个元素:
Pop方法:
Queue的实现:Queue是一种先进先出的数据结构,和Stack一样,他也有链表和数组两种实现,理解了Stack的实现后,Queue的实现就比较简单了。
Dequeue方法就是返回链表中的第一个元素,这个和Stack中的Pop方法相似:
和Stack的实现方式不同,在Queue中,我们定义了head和tail来记录头元素和尾元素。当enqueue的时候,tial加1,将元素放在尾部,当dequeue的时候,head减1,并返回。