(第6讲)栈和队列的链表实现

/**

 * 用链表实现栈:利用了不带头结点的单链表,这里的从链表头插入和从链表头删除刚好符合栈的特性:

从一个端口新增,删除;又符合先进后出的特点

 */
package com.five;


public class LinkStackAPP {


public static void main(String[] args) {
LinkStack stack = new LinkStack();
stack.push(20);
stack.push(40);
stack.display();
stack.push(60);
stack.push(80);
stack.display();
stack.pop();
stack.display();
stack.pop();
stack.display();


}


}
//结点类
class Link11{
public Object data;
public Link11 next;
public Link11(Object data,Link11 next){
this.data = data;
this.next = next;
}
public Link11(Object data){
this(data,null);
}
public Link11(){
this(null,null);
}
}
//链表类
class LinkList11{
private Link11 head;
public LinkList11(){
head = null;
}
public boolean isEmpty(){
return (head==null);
}
public void display(){
Link11 node = head;
while(node!=null){
System.out.print(node.data+" ");
node = node.next;
}
System.out.println();
}
//从表头增
public void insertFirst(Object value){
Link11 node = new Link11(value);
node.next = head;
head = node;
}
//从表头删
public void deleteFirst(){
head = head.next;

}
//链表栈类
class LinkStack{
private LinkList11 list ;
public LinkStack(){
list = new LinkList11();
}
//栈是否为空
public boolean isEmpty(){
return list.isEmpty();
}
//进栈
public void push(Object value){
list.insertFirst(value);
}
//出栈
public void pop(){
list.deleteFirst();
}
//遍历
public void display(){
list.display();
}

}

结果是:40 20 
80 60 40 20 
60 40 20 
40 20 

/**
 * 队列:链表实现:利用了不带头结点的双端链表(注意不是双向链表,是双端链表),与单链表的区别就是多了一个尾结点的引用,即有两个指针,一个是head,一个是rear

 */
package com.five;


public class LinkQueueAPP {


public static void main(String[] args) {
LinkQueue queue = new LinkQueue();
queue.insert(20);
queue.insert(40);
queue.display();
queue.insert(60);
queue.insert(80);
queue.display();
queue.delete();
queue.display();
queue.delete();
queue.display();


}


}
//结点类
class Link12{
public Object data;
public Link12 next;
public Link12(Object data,Link12 next){
this.data = data;
this.next = next;
}
public Link12(Object data){
this(data,null);
}
public Link12(){
this(null,null);
}
}
//链表类
class LinkList12{
private Link12 head;
private Link12 rear;
public LinkList12(){
head = null;
rear = null;
}
//判断是否为为空
public boolean isEmpty(){
return head==null;
}
//链表尾新增
public void insertLast(Object value){
Link12 node = new Link12(value);
if(isEmpty())
head = node;
else
rear.next = node;
rear = node;

}
//链表头删除
public void deleteFirst(){ 
if(head.next==null)
rear = null;
head = head.next;  
}
//遍历
public void display(){
Link12 node = head;
while(node!=null){
System.out.print(node.data+" ");
node = node.next;
}
System.out.println();
}
}
//队列:链表实现
class LinkQueue{
LinkList12 list;
public LinkQueue(){
list = new LinkList12();
}
//是否为空
public boolean isEmpty(){
return (list.isEmpty());
}
//进队
public void insert(Object value){
list.insertLast(value);
}
//出队
public void delete(){
list.deleteFirst();
}
//遍历
public void display(){
list.display();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值