堆栈与队列

来源:互联网 发布:mac 下载ipython 编辑:程序博客网 时间:2024/05/17 22:03

堆栈与队列可以用数组实现,也可以用链表实现。下文统一用链表实现上述数据结构。

堆栈服从先进后出原则,只对栈头进行删除和插入操作,即封锁了链表的一端,只对链表的另一端进行操作,就形成了逻辑上的堆栈结构。

//节点
public class StackNode {

int content;//节点内容
StackNode Next;//指向下一节点
}
//堆栈实现
public class Stacklink {
StackNode keyNode=null;//栈顶指针
//判断栈是否为空
public boolean isEmpty(){
return (keyNode==null);
}
//入栈操作
public void push(int x)
{
StackNode tempNode =new StackNode();
tempNode.content=x;
tempNode.Next=keyNode;
keyNode=tempNode;
}
//出栈操作
public StackNode pop(){
if(keyNode==null){
System.out.println("当前栈为空");
return null;
}
else{
    StackNode tempNode=keyNode;
    keyNode=keyNode.Next;
return tempNode;
}
}
//查询栈顶元素,不从堆栈中移除
public int peak(){
return keyNode.content;
}

}

出栈时将头指针指向的节点暂时保存(用于返回),然后将头指针指向下一节点。返回原先保存的节点,则进行了出栈操作。

入栈是将新节点指向栈顶元素,然后将头指针指向新节点,则进行了入栈操作。


队列服从先进先出的原则,对链表的一端只进行删除(出队)操作,对另一端只进行入队操作。则形成了逻辑上的队列。

//节点
public class QueueNode {
   int content;节点内容
   QueueNode next;指向下一节点
   
}
//队列
public class QueueLink {
int count;//队列大小
QueueNode front,rear;//定义首指针和尾指针,分别用于出队和入队操作
//入队操作
public void insert(int content){
QueueNode temp=new QueueNode();
temp.content=content;
temp.next=null;
if(count==0){
front=rear=temp;
}
else{
rear.next=temp;
rear=temp;
}
count++;
}
//出队操作
public QueueNode remove(){
if(count==0)
{
System.out.println("当前队列为空");
return null;
}
else{
QueueNode temp =front;
front=front.next;

if(front==null){
rear=null;
}
count--;
return temp;
}
}
//判断是否为空
public boolean isEmpty(){
return count==0;
}
//返回队列大小
public int size(){
return count;
}
}

队列采用两个指针,头指针用于出队操作,尾指针用于入队操作。出队时保存头指针节点用于返回,将头指针指向下一节点。则完成了出队操作。

入队时将尾指针指向的节点指向新节点。再将尾指针指向新节点。则完成了入队操作。

0 0