12.链表综合案例

本文通过两个面向对象的程序设计案例,介绍如何使用Java实现宠物商店的商品管理(上架、下架、模糊查询)以及超市购物车的结账功能。案例旨在展示面向对象编程在实际问题解决中的应用。
摘要由CSDN通过智能技术生成

1.宠物商店

        面向对象的程序设计可以实现生活概念的程序抽象化,应用面向对象的程序设计解决一个实际问题。现在假设有一个宠物商店,在这个商店里会出售各种宠物共用户选择,现在要求通过程序逻辑描述实现宠物商品的上架,下架,关键字模糊查询的功能。

完整程序如下: 2.

package cn.kuiba.util;

interface ILink<E> {         //设置泛型避免安全隐患
    public void add(E e) ;   //增加数据
    public int size() ;    //获取数据的个数
    public boolean isEmpty() ;   //判断是否空集合
    public Object[] toArray() ;     //将集合元素以数组的形式返回
    public E get(int index) ;   //根据索引获取数据
    public void set(int index,E data) ;    //修改索引数据
    public boolean contains(E data) ; //判断数据是否存在
    public void remove(E data) ;        //数据删除
    public void clean() ;    //清空集合
}
class LinkImpl<E> implements ILink<E> {
    private class Node {         //保存节点的数据关系
        private E data ;      //保存数据
        private Node next ;       //保存下一个引用
        public Node(E data) {          //有数据的情况下才有意义
            this.data = data ;
        }
        //第一次调用:this = LinkImpl.root ;
        //第二次调用:this = LinkImpl.root.next ;
        //第三次调用:this = LinkImpl.root.next.next ;
        public void addNode(Node newNode){      //保存新的Node数据
            if (this.next == null) {   //当前节点的下一个节点为null
                this.next = newNode;      //保存当前节点
            }else {
                this.next.addNode(newNode);
            }
        }
        //第一次调用:this = LinkImpl.root
        //第二次调用:this = LinkImpl.root.next
          //第三次调用      this = LinkImpl.root.next.next
        public void toArrayNode() {
            LinkImpl.this.returnData [LinkImpl.this.foot ++] = this.data ;
            if (this.next != null) {     //还有下一个数据
                this.next.toArrayNode() ;
            }
        }
        public E getNode(int index) {
            if (LinkImpl.this.foot ++ == index) {       //索引相同
                return this.data ;    //返回当前数据
            }else {
                return this.next.getNode(index) ;
            }
        }
        public void setNode(int index,E data) {
            if (LinkImpl.this.foot ++ == index) {       //索引相同
                this.data = data ;    //修改数据
            }else {
                this.next.setNode(index,data) ;
            }
        }
        public boolean containsNode(E data) {
            if (data.equals(this.data)) {    //对象比较
                return true ;
            }else {
                if (this.next == null) {         //没有后续节点
                    return false ;   //找不到
                }else {
                    return this.next.containsNode(data) ;   //向后继续判断
                }
            }
        }
        public void removeNode (Node previous,E data) {
            if (this.data.equals(data)) {
                previous.next = this.next ;    //空出当前节点
            }else {
                if (this.next != null) {       //有后续节点
                    this.next.removeNode(this, data) ;    //向后继续删除
                }
            }
        }
    }
    //------------以下为Link类中定义的成员-----------------
    private Node root ;       //保存根元素
    private int count ;     //保存数据的个数
    private int foot ;     //描述的是操作数组的脚标
    private Object[] returnData ;   //返回的数据保存
    //------------以下为Link类中定义的方法-----------------
    public void add(E e){
        if(e == null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值