leiyahui

纸上得来终觉浅,绝知此事要躬行
串的堆存储结构

一 串的堆存储结构是指系统分配一个足够大可被串值利用的存储空间,每当建立一个新串的时候,系统可以从这个空间中划出一个大小和串长度相等的空间来储存新的串值。每个串自动存储在一个组连续的单元中。由于每个串的存储空间是运行时生成的,所以这也是一种动态存储方式。

二 串的堆存储结构描述。

可以存放若干个字符的存储空间是char stroe[maxsize+1],可将字符型数组store视为一个堆。

堆stroe可存放让干个串,free为自由空间的起始序号。每向堆中存放一个字符串的时候都要指明该串在字符数种中的起始位置和长度,即每个串的存储映像。

定义为

typedef struct
    {
        int str;
        int len;
    }splen;

str为串的起始地址,len为串的长度

二 串的基本操作

(1)串常量送入堆中

void Sassgin(splen* s, char t[], int len)
    {
        int i;
        if (len<0 || free + len>maxsize + 1)
        {
            Error(len);
        }
        else
        {
            for (i = 0; i < len; i++)
            {
                store[free + i] = t[i];  //存入字符串
            }
            s.len = len;
            s.str = free;
            free = +len;

        }
    }

(2)复制一个字符串

void Scopy(splen* s, splent t)
    {
        int i;
        if (t.len<0 || free + t.len>maxsize + 1)
        {
            return Error(i);
        }
        else
        {
            s.st = free;
            s.len = t.len;
            for (i = 0; i < t.len; i++)
            {
                store[s.str + i] = store[t.str + i];
            }
            free = +t.len;
        }
    }

(3)将两个字符串相加后放在堆中S镜像。

void Concat(splen*s,splen s1, splen s2)
    {
        splen v;
        Scopy(s, s1);
        Scopy(v, s2);
        s.len = s1.len + s2.len;
    }

posted on 2015-11-19 15:58  雷大叔  阅读(1388)  评论(0)    收藏  举报