数据结构入门之单链表代码实现(java)
1:单链表是:
- 单链表是一种链式存取的 数据结构 用一组地址任意的 存储单元 存放线性表中的数据元素。
- 链表中的数据是以结点来表示的,每个结点的构成:元素 ( 数据元素 的映象) + 指针 (指示后继元素 存储 位置),元素就是存储数据的存储单元,指针就是连接每个结点的 地址 数据。 链表中的数据是以结点来表示的,
- 每个结点的构成:元素 ( 数据元素 的映象) + 指针 (指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 以“结点的序列”表示线性表称作 线性链表 (单链表),单链表是链式存取的结构。 链接方式存储的线性表简称为链表(Linked List)。 ② 链表中结点的逻辑次序和物理次序不一定相同。
2:代码实现:
单链表类属性的定义:
public class HeroNode { //编号 public int no; public String Name; public String noName; //指向下一个节点 public HeroNode next; public HeroNode(int no, String name, String noName) { this.no = no; Name = name; this.noName = noName; } }
单链表管理类(简单的增删改查):
class LindedHeroNode { private HeroNode head = new HeroNode(0, "", ""); //顺序添加并不能重复 public void addOrder(HeroNode heroNode) { HeroNode temp = head; //标识 boolean flag = false; while (true) { if (temp.next == null) { //已经到最后了 break; } if (temp.next.no > heroNode.no) {//找到位置就添加到后面 break; } else if (temp.next.no == heroNode.no) {//相等则不添加 flag = true; break; } //后移 temp = temp.next; } if (flag) { System.out.println("有相等的编号"); } else { heroNode.next = temp.next; temp.next = heroNode; } } //修改 public void update(HeroNode heroNode) { //先判断链表内部有没有数据 if (head.next == null) { return; } HeroNode temp = head.next; boolean flag = false; while (true) { if (temp.next == null) { break; } //找到退出 if (temp.no == heroNode.no) { flag = true; break; } //指向下一节点 temp = temp.next; } if (flag) { temp.Name = heroNode.Name; temp.noName = heroNode.noName; } else { System.out.println("没有找到标识"); } } //删除 public void delect(int no) { if (head.next == null) { System.out.println("没有数据"); return; } HeroNode temp = head; boolean flag = false; while (true) { if (temp.next == null) { break; } if (temp.next.no == no) { flag = true; break; } temp = temp.next; } if (flag) { temp.next = temp.next.next; } else { System.out.println("没有找到"); } } //遍历 public void list() { if (head.next == null) { System.out.println("没有数据"); return; } //头结点不能动 需要一个辅助变量来辅助 HeroNode temp = head.next; while (true) { if (temp == null) { break; } System.out.println(temp); temp = temp.next; } } }
3:测试:
//主测试 public class LinkedTest { public static void main(String[] args) { HeroNode heroNode = new HeroNode(1, "老大", "喜欢冰淇淋"); HeroNode heroNode1 = new HeroNode(3, "老三", "喜欢棉花糖"); HeroNode heroNode2 = new HeroNode(2, "老二", "喜欢巧克力"); HeroNode heroNode3 = new HeroNode(4, "老四", "喜欢棒棒糖"); LindedHeroNode lindedHeroNode = new LindedHeroNode(); //添加 lindedHeroNode.addOrder(heroNode); lindedHeroNode.addOrder(heroNode1); lindedHeroNode.addOrder(heroNode2); lindedHeroNode.addOrder(heroNode3); //修改 HeroNode heroNode4 = new HeroNode(2, "小杰", "帅哥"); lindedHeroNode.update(heroNode4); //删除 lindedHeroNode.delect(6); //遍历 lindedHeroNode.list(); } }