* 用链表实现栈:利用了不带头结点的单链表,这里的从链表头插入和从链表头删除刚好符合栈的特性:
从一个端口新增,删除;又符合先进后出的特点
*/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();
}
}