數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)筆記(四)——串

串的基本數(shù)據(jù)類(lèi)型

串的基本數(shù)據(jù)類(lèi)型

定長(zhǎng)順序存儲(chǔ)

初始化賦值

bool StrAssign(SString T, char *chars)
{
    int i;
    if (strlen(chars) > MAXSIZE)
    {
        for (i = 1; i <= MAXSIZE; ++i)
            T[i] = *(chars + i - 1);
        T[0] = MAXSIZE;
    }
    else
    {
        T[0] = strlen(chars); //p.s.此時(shí)T[0]存入的是int類(lèi)型的數(shù)據(jù),打印%s時(shí)無(wú)法顯示
        for (i = 1; i <= T[0]; ++i)
            T[i] = *(chars + i - 1);
        return OK;
    }
}
//
int StrLength(SString s) {
    return s[0]+1;
}

bool StrCopy(SString T, SString s) {
    int slen = StrLength(s);
    if (!slen) {
        return ERROR;
    }
    for (int i = 1; i < slen; i++) {
        T[i] = s[i];
    }
    T[0] = slen;
    return OK;
}



void StrPrint(SString T) {
    
    int len = StrLength(T);
    for (int i = 1; i < len; i++) {
        cout << T[i]<<" ";
    }
    cout << endl;
}


bool StrCat(SString T, SString s) {
    int tLenght = StrLength(T);
    int sLength = StrLength(s);
    if (tLenght + sLength >= MAXSIZE) {
        return ERROR;
    }
    int j = 1;
    for (int i = tLenght; i < tLenght + sLength; i++) {
        
        T[i] = s[j];
        j++;
        if (j > sLength) {
            break;
        }
    }
    T[0] = tLenght + sLength;
    return OK;
}

堆分配存儲(chǔ)

參考 https://blog.csdn.net/ta893115871/article/details/8119040

typedef struct {
    char *ch;
    int len;
} HString;

bool InitHString(HString* s) {
    s->ch = (char*)malloc(sizeof(char));
    if (NULL == s->ch)
        return ERROR;
    s->ch = NULL;
    s->len = 0;
    return OK;
}


bool StrAssign(HString *T, const char *s) {
    if (T->ch)
        free(T->ch);
    int length = 0, i;
    while (s[length] != '\0')
        length++;
    T->ch = (char*)malloc(length * sizeof(char));
    if (!T->ch)
        return ERROR;
    for (i = 0; i < length; i++)
        *(T->ch + i) = *(s + i);
    T->len = length;
    *(T->ch + T->len) = '\0';
    return OK;
}

樸素的模式匹配算法

int Index(SString T, SString S, int pos) {
    int i = pos;

    int j = 1;
    while (i <= S[0] && j <= T[0]) {
        if (S[i] == T[i]) {
            i++;
            j++;
        }
        else {
            i = i - j + 2; //退回到上次匹配的下一位
            j = 1;
        }
    }
    if (j > T[0]) {
        return i - T[0];
    }
    else
        return 0;
}

KMP模式匹配算法

參考 https://www.cnblogs.com/dusf/p/kmp.html
https://blog.csdn.net/x__1998/article/details/79951598

int KMP(char * t, char * p) 
{
    int i = 0; 
    int j = 0;
 
    while (i < strlen(t) && j < strlen(p))
    {
        if (j == -1 || t[i] == p[j]) 
        {
            i++;
                j++;
        }
        else 
                j = next[j];
        }
 
    if (j == strlen(p))
       return i - j;
    else 
       return -1;
}
void getNext(char * p, int * next)
{
    next[0] = -1;
    int i = 0, j = -1;
 
    while (i < strlen(p))
    {
        if (j == -1 || p[i] == p[j])
        {
            ++i;
            ++j;
            next[i] = j;
        }   
        else
            j = next[j];
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚯瞧,一起剝皮案震驚了整個(gè)濱河市劫谅,隨后出現(xiàn)的幾起案子窜管,更是在濱河造成了極大的恐慌现恼,老刑警劉巖偷厦,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件展氓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡割去,警方通過(guò)查閱死者的電腦和手機(jī)窟却,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呻逆,“玉大人夸赫,你說(shuō)我怎么就攤上這事】С牵” “怎么了茬腿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)宜雀。 經(jīng)常有香客問(wèn)我切平,道長(zhǎng),這世上最難降的妖魔是什么辐董? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任悴品,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苔严。我一直安慰自己菇存,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布邦蜜。 她就那樣靜靜地躺著,像睡著了一般亥至。 火紅的嫁衣襯著肌膚如雪悼沈。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天姐扮,我揣著相機(jī)與錄音絮供,去河邊找鬼。 笑死茶敏,一個(gè)胖子當(dāng)著我的面吹牛壤靶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惊搏,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贮乳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了恬惯?” 一聲冷哼從身側(cè)響起向拆,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酪耳,沒(méi)想到半個(gè)月后浓恳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碗暗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年颈将,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片言疗。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晴圾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洲守,到底是詐尸還是另有隱情疑务,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布梗醇,位于F島的核電站知允,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叙谨。R本人自食惡果不足惜温鸽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涤垫,春花似錦姑尺、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至榆芦,卻和暖如春柄粹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匆绣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工驻右, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崎淳。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓堪夭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拣凹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子森爽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 原創(chuàng)鏈接 一、Java面試題java有多重要嚣镜,對(duì)于做android的我們拗秘,不需要多說(shuō)了,let’s go (1)J...
    李福來(lái)閱讀 2,310評(píng)論 0 5
  • 包含的重點(diǎn)內(nèi)容:JAVA基礎(chǔ)JVM 知識(shí)開(kāi)源框架知識(shí)操作系統(tǒng)多線程TCP 與 HTTP架構(gòu)設(shè)計(jì)與分布式算法數(shù)據(jù)庫(kù)知...
    消失er閱讀 4,331評(píng)論 1 10
  • html HTML5新特性祈惶,語(yǔ)義化https://www.cnblogs.com/vicky1018/p/7705...
    _旁觀者_(dá)閱讀 726評(píng)論 0 0
  • hashmap實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)雕旨,數(shù)組、桶等捧请。 如圖所示 JDK 1.7凡涩,是以數(shù)組+鏈表組成的,鏈表為相同hash的鍵...
    不需要任何閱讀 833評(píng)論 0 1
  • 本系列出于AWeiLoveAndroid的分享疹蛉,在此感謝活箕,再結(jié)合自身經(jīng)驗(yàn)查漏補(bǔ)缺,完善答案可款。以成系統(tǒng)育韩。 Java基...
    濟(jì)公大將閱讀 1,529評(píng)論 1 6