链表
1.链表的介绍
链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
物理空间上的存储结构:
说明:
在java中不存在指针,这里的指针成员指的是后继结点或前驱结点,只是为了表示方便仍然采用"指针"一词。
2.链表的特点
-
链表是以结点的形式存储的,是链式存储 -
每个结点包括data区域和next区域 -
各个结点并不是连续存储的 -
链表有带头结点链表和不带头结点链表: 带头结点链表逻辑结构:
单链表的实现
单链表就是每个结点只设置一个指向其后继结点的指针成员。
在单链表中,当访问过一个结点后,只能接着访问它的后继结点,无法访问它的前驱结点。
需求:
根据带有头部的单链表,实现商品的增删改查,并且也可以针对商品已编号进行排序,完成排行榜。
public class LinkNode {
public int id;
public String name;
public double price;
public LinkNode next;
public LinkNode(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
public String toString(){
return "LinkNode{"+"id="+id+",name="+name+",price="+price+'}';
}
}
public class DLLinkedList {
private LinkNode node=new LinkNode(0,"",0.0);
public void add(LinkNode node1){
LinkNode temp=node;
while(true){
if(temp.next==null){
break;
}
temp=temp.next;
}
temp.next=node1;
}
public void addOrder(LinkNode node2){
LinkNode temp=node;
boolean flag=false;
while (true){
if(temp.next==null){
break;
}
if(temp.next.id>node2.id){
break;
}else if(temp.next.id==node2.id){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
System.out.println("已经存在该商品,不能添加重复元素");
}
else{
node2.next=temp.next;
temp.next=node2;
}
}
public void update(LinkNode node3){
if (node.next==null){
System.out.println("空链表");
return;
}
LinkNode temp=node.next;
boolean flag=false;
while (true){
if(temp==null){
break;
}
if (temp.id== node3.id){
flag=true;
break;
}
temp=temp.next;
}
if (flag){
temp.name=node3.name;
temp.id=node3.id;
}
else {
System.out.println("未找到目标结点");
}
}
public void delete(LinkNode node4){
LinkNode temp=node;
boolean flag=false;
while (true){
if(temp.next==null){
break;
}
if (temp.next.id==node4.id){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.next=temp.next.next;
}else {
System.out.println("未找到删除结点");
}
}
public void list(){
if(node.next==null){
System.out.println("空结点");
return;
}
LinkNode temp=node.next;
while(true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
public class LinkedTest {
public static void main(String[] args) {
DLLinkedList linkedList=new DLLinkedList();
LinkNode node1=new LinkNode(1,"naike",599.00);
LinkNode node2=new LinkNode(2,"tebu",399.00);
LinkNode node3=new LinkNode(3,"adi",699.00);
LinkNode node4=new LinkNode(4,"lining",499.00);
linkedList.add(node1);
linkedList.add(node2);
linkedList.add(node3);
linkedList.add(node4);
linkedList.list();
linkedList.update(new LinkNode(2,"qiaodan",288.00));
linkedList.list();
linkedList.delete(node4);
linkedList.list();
linkedList.addOrder(node2);
linkedList.addOrder(node1);
linkedList.addOrder(node3);
linkedList.addOrder(node4);
linkedList.list();
}
}
|