javascript数据结构系列(五)-串(3)

前言

之前写的方法和数据结构结构是串的块存储方式,今天写的是堆分配存储表示。这种表示的特点是:仍以一组地址连续的存储单元存放串值字符序列,但他们的存储空间是在程序执行过程中动态分配而得。ps:前几天比较忙,很多其他的杂事没来得及写博客。

串的堆分配方式

//存储结构
function Hstring(){
    this.ch = [];
    this.length = 0;
};
//相关方法
exports.Hstring = Hstring;
Hstring.prototype = {
    StrAssign:function(chars){
        StrCopy(this.ch, chars, 0, chars.length - 1, 0); 
        this.length = chars.length;
    },
    StrLength:function(){
        return this.length;
    },
    ClearHString:function(){
        this.ch  = [];
        this.length = 0;
    },
    //比较两个串,若S > T,则返回>0,=则返回0,否则返回< 0;
    StrCompare:function(THString){
        for(var i = 0;i < this.length && i<THString.length;++i ){
            if(this.ch[i] != THString.ch[i]){
                return this.ch[i]-THString.ch[i];
            }
        }
        return this.length - THString.length;
    },
    //链接两个字符串
    Concat:function(S){
        var T = new Hstring();
        //直接将this所指的字符串拷贝给T
        StrCopy(T.ch,this.ch,0,this.length - 1,0);
        //设置T的长度
        T.length = this.length + S.length;
        //拷贝S的字符串给T,注意destStart是从this.Length开始的
        StrCopy(T.ch,S.ch,this.length,S.length - 1,0);
        console.log(T.toString());
        return T;
    },
    //sub返回串this的第pos个字符起长度为len的子串
    SubString:function(pos,len){
        if(pos < 1 || pos > this.length || len  < 0 || len > this.length-pos+1){
            return Error;
        }
        var sub = new Hstring();
        if(!len){
            return false;
        }else{
            StrCopy(sub.ch, this.ch, 0, len - 1, pos);
            sub.length = len;
        }
        console.log(sub);
        return sub;
    },
    toString:function(){
        var s = '';
        for(var i = 0;i<this.length;i++){
            s += this.ch[i];
        }   
        console.log(s)
        return s;
    },
}

后记

串的相关数据结构应该还有一个KMP匹配算法,加上一个到两个相关练习题。串结束之后就是数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值