vlambda博客
学习文章列表

Typscript 数据结构与算法--list

Typscript 数据结构与算法--list

interface IProps {
    data: any
}

class List<T extends IProps> {
    private listSize: number = 0
    private dataStore: T[] = []
    private pos: number = 0

    /**
     * 追加数据
     * @param item
     */

    append(item: T) {
        this.dataStore[this.listSize++] = item
    }

    /**
     * 查找某个元素的位置
     * @param item
     */

    find(item: T): number {
        for (let index = 0; index < this.listSize; index++) {
            if (this.dataStore[index].data === item.data) {
                return index
            }
        }
        return -1
    }

    /**
     * 删除指定元素
     * @param item
     */

    remove(item: T) {
        let pos = this.find(item)
        if (pos >= 0) {
            this.dataStore.splice(pos, 1);
            --this.listSize
        }
    }

    /**
     * 获得数组长度
     */

    length(): number {
        return this.listSize
    }

    /**
     * 打印所有的数据
     */

    toString(): T[] {
        return this.dataStore
    }

    /**
     * 在指定元素后面插入数据
     * @param item1
     * @param item2
     */

    insert(item1: T, item2: T) {
        let pos = this.find(item1)
        if (pos > -1) {
            this.dataStore.splice(pos, 0, item2)
            this.listSize++
        }
    }

    /**
     * 清空数据
     */

    clear() {
        delete this.dataStore
        this.dataStore = []
        this.listSize = this.pos = 0
    }

    /**
     * 查看是否包含某个元素
     * @param item
     * @return boolean
     */

    contains(item: T): boolean {
        for (let e of this.dataStore) {
            if (e.data === item.data) {
                return true
            }
        }
        return false
    }

    /**
     * 查找下一条数据,把游标往后移动一位
     */

    next(): T | null {
        if (this.pos > this.listSize - 1) {
            return null
        }
        return this.dataStore[this.pos++]
    }

    /**
     * 查找前一个元素,把游标向前移动一位
     */

    pre(): T | null {
        if (this.pos < 0) {
            return null
        }
        return this.dataStore[--this.pos]
    }
}

let l = new List()
l.append({data: 0})
l.append({data: 1})
l.insert({data: 1}, {data: 2})
l.find({data: 0})
l.remove({data: 0})
console.log(l.length())
console.log(l.contains({data: 1}))
console.log(l.contains({data: 3}))
console.log(l.toString())
// l.clear()
console.log(l.length())
console.log(l.toString())
let next = l.next()
while (next) {
    console.log(next)
    next = l.next()
}
let pre = l.pre()
while (pre) {
    console.log(pre)
    pre = l.pre()
}

// 2
// true
// false
//     [ { data: 2 }, { data: 1 } ]
// 2
//     [ { data: 2 }, { data: 1 } ]
// { data: 2 }
// { data: 1 }
// { data: 1 }
// { data: 2 }

图片代码示例,可以保存到相册慢慢琢磨,或者分享给朋友

List