抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

开始学习数据结构了,本来想着用cpp实现来着,实在是太麻烦了,顺便学习一下typescript也不错!

首先定义接口,这是顺序表的数据结构:

// interface/SeqList.ts
export default interface DataType {
    num: number;
    name: string;
    age: number
}

export default interface List {
    data: Array<DataType>;
    length: number;
}

app.ts里将基本的结构搭建起来:

// app.ts
import {List, DataType} from "/interface/SeqList"

class SeqList implements List {
    private Maxsize: number = 100;

    data: Array<DataType>;
    length: number;

    constructor(data = []) {
        this.data = data;
        this.length = data.length;
    }
}

展示列表:

// 展示列表
showList() {
    console.log("data:")
    for (let i = 0; i < this.length; i++) {
        console.log("\t", this.data[i])
    }
    console.log("length:\n\t", this.length)
}

插入元素:

// 插入元素
insertSeqList(x: DataType, index: number) {
    if (index > this.length + 1 || index < 1) {
        throw new Error("下标越界了")
    }
    if (this.length === this.Maxsize) {
        throw new Error("空间不足了")
    }
    for (let i = this.length; i >= index; i--) {
        this.data[i] = this.data[i - 1];
    }
    this.data[index - 1] = x;
    this.length++;
}

首先判断一下边界,然后将最后的一个元素往后挪(因为边界判断了,这里不会越界)

别忘了length自增

删除元素

// 删除元素
DeleteSeqList(index: number) {
    if (index > this.length + 1 || index < 1) {
        throw new Error("下标越界了")
    }
    for (let i = index; i < this.length; i++) {
        this.data[i - 1] = this.data[i];
    }
    this.length--;
}

这里判断完边界之后直接将后一个覆盖到要删除的元素上就可以了,位于最后的那个元素还存在,读取的时候不要读到它,就假装是删除了。

定位元素

// 定位元素
LocateSeqList(x: DataType, key = "num"): number {
    let i = 0;
    // @ts-ignore
    while (i < this.length && this.data[i][key] != x[key]) {
        i++;
    }
    if (i < this.length) return i + 1;
    return -1;
}

就是从头一直找,找到就返回

测试

let l: SeqList = new SeqList();
l.insertSeqList({
    num: 1,
    name: "sunzehui",
    age: 12
}, 1)
l.insertSeqList({
    num: 2,
    name: "sunzehui",
    age: 13
}, 2)
l.insertSeqList({
    num: 4,
    name: "sunzehui",
    age: 13
}, 2)
l.showList()
l.DeleteSeqList(1);
l.showList()
console.log(l.LocateSeqList({
    num: 2,
    name: "sunzehui",
    age: 13
}))

/*
output:
删除前:
data:
         { num: 1, name: 'sunzehui', age: 12 }
         { num: 4, name: 'sunzehui', age: 13 }
         { num: 2, name: 'sunzehui', age: 13 }
length:
         3
         
删除后:  
data:
         { num: 4, name: 'sunzehui', age: 13 }
         { num: 2, name: 'sunzehui', age: 13 }
length:
         2
         
找到的元素位置:  
2


*/

总结

顺序表的物理空间都是连续的,所以用数组实现,low了点,具体多low下次再说。

评论