数据结构与算法(JavaScript描述) -- 线性表(一)

线性表的顺序存储结构与实现

一、定义常量

const ERROR = false;
const OK = true;

二、定义顺序表结构

class sqList {
    constructor() {
        this.Elem = []; // 存储数组
        this.length = 0; // 当前长度
    }
}

三、定义顺序表的操作方法

class sqList {
    constructor() {
        this.Elem = []; // 存储数组
        this.length = 0; // 当前长度
    }
    // 初始化顺序表
    initList_Sq () {
        this.Elem = [];
        this.length = 0;
    }
    // 在顺序表的第i个位置插入新的元素elem
    listInsert_Sq (index,elem) {
        if(index < 1 || index > this.length+1) return ERROR; // index值不合法
        for(var i = this.length - 1; i >= index-1; i--) {
            this.Elem[i+1] = this.Elem[i];
        }
        this.Elem[index-1] = elem;
        ++this.length;
        return OK;
    }
    // 删除顺序表的第i个位置的元素
    listDelete_Sq (index) {
        if(index<1 || index > this.length) return ERROR; // index值不合法
        for(var i = index-1; i < this.length; i++) {
            this.Elem[i] = this.Elem[i+1];
        }
        --this.length;
        this.Elem.length = this.length;
        return OK;
    }
    // 在顺序表中查找elem第一次出现的位序,如果查找到,则返回该位序,否则返回0
    locateElem_Sq (elem) {
        let i = 1;
        while(i <= this.length && this.Elem[i-1] !== elem) {
            ++i;
        }
        return i <= this.length ? i : 0;
    }
}

四、封装暴露顺序表相关方法

export default {
	function print(content) {
    	console.log(content);
	}
	// 初始化顺序表
	function InitList_Sq () {
    	const sq = new sqList();
    	return sq;
	}
	// 在顺序表的第i个位置插入新的元素elem
	function ListInsert_Sq (sqList,index,elem) {
    	return sqList.listInsert_Sq(index,elem);
	}
	// 删除顺序表的第i个位置的元素
	function ListDelete_Sq (sqList,index) {
    	return sqList.listDelete_Sq(index);
	}
	// 在顺序表中查找elem第一次出现的位序,如果查找到,则返回该位序,否则返回0
	function LocateElem_Sq (sqList,elem) {
    	return sqList.locateElem_Sq(elem);
	}
	// 合并两个顺序表
	function MergeList (La,Lb) {
    	// 已知La,Lb的元素非递减排列
    	const Lc = new sqList();
    	let pa = 0;
    	let pb = 0;
    	let pc = 0;
    	while((pa <= La.length - 1) && (pb <= Lb.length - 1)) {
        	if(La.Elem[pa] <= Lb.Elem[pb]) {
            	Lc.Elem[pc++] = La.Elem[pa++];
        	} else {
            	Lc.Elem[pc++] = Lb.Elem[pb++];
        	}
    	}
    	while(pa <= La.length - 1) Lc.Elem[pc++] = La.Elem[pa++];
    	while(pb <= Lb.length - 1) Lc.Elem[pc++] = Lb.Elem[pb++];
    	Lc.length = La.length + Lb.length;
    	return Lc;
	}
}

五、Test

const sq1 = InitList_Sq();
ListInsert_Sq(sq1,1,'zs');
ListInsert_Sq(sq1,2,'sm');
ListInsert_Sq(sq1,3,'zy');
print(sq1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值