国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)--串的基本操作

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)--串的基本操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

系列文章目錄

第五話 數(shù)據(jù)結(jié)構(gòu)之串

文章目錄

  • 一、了解什么是串
  • 二、串的基本特征
  • 三、串的基本操作
    • 串的初始化
    • 串的輸出?
  • 四、串的匹配模式
  • 五、總結(jié)

前言

串(即字符串)是一種特殊的線性表,在信息檢索、文本編輯等領(lǐng)域有廣泛的應(yīng)用。其特殊性體現(xiàn)在組成線性表的每個(gè)數(shù)據(jù)元素是單個(gè)字符,而由一個(gè)個(gè)字符串起的字符串卻是最基本的非數(shù)值數(shù)據(jù),在操作過程中常常作為一個(gè)整體來處理。研究串的特點(diǎn)、存儲(chǔ)結(jié)構(gòu)和基本操作實(shí)現(xiàn),是非常有必要的。

一、串的定義

1.串的定義

串是由零個(gè)或任意多個(gè)字符組成有限序列。一般記為:s="a1a2a3...an"(n>=0)

串可以是字母、數(shù)字或其他字符,n為串的長(zhǎng)度。

2.串的相關(guān)術(shù)語

(1)空串。不含任何字符的串稱為空串,即串的長(zhǎng)度n=0時(shí),稱為空串。

(2)空格串。由一個(gè)或多個(gè)稱為空格的特殊字符組成的串稱為空格串,其長(zhǎng)度是串中空格字符的個(gè)數(shù)。

(3)子串。串中任意連續(xù)的字符組成的子序列稱為該串的子串。另外,空串是任意串的子串,任意串是自身的子串。

(4)主串。包含子串的串稱為該子串的主串。

(5)匹配模式。子串的定位運(yùn)算又稱為串的匹配模式,是一種求子串在主串中第一次出現(xiàn)的第一個(gè)字符的位置。

(6)串相等。兩個(gè)串的長(zhǎng)度相等且各個(gè)位置上對(duì)應(yīng)的字符也都相同。

二、串的基本特征

對(duì)照串的定義和線性表的定義可知,串是一種其數(shù)據(jù)元素固定為字符的線性表。但是,串的基本操作對(duì)象和線性表的操作對(duì)象卻有很大的不同。線性表上的操作是針對(duì)其某個(gè)元素進(jìn)行的,而串上的操作主要是針對(duì)串的整體或串的一部分子串進(jìn)行的。這也是把串單獨(dú)作為一章的原因。

三、串的基本操作?

1.定義存儲(chǔ)結(jié)構(gòu)--順序存儲(chǔ)

#include<stdio.h>
#include<stdlib.h>
#define maxsize 80
typedef char Elemtype;
typedef struct{
    Elemtype date[maxsize];
    int Len;
}String;

2.將串進(jìn)行初始化

String *init_string()
{
    String *s;
    s = (String*)malloc(sizeof(String));
    if(s!=NULL){
        s->Len=0;
    }
    return s;
}

3. 創(chuàng)造一個(gè)串并求其串長(zhǎng)度

void createstring(String *s)
{
    printf("請(qǐng)輸入一段字符串,按回車結(jié)束:\n");
    gets(s->date);
    int i=0,j=0;
    while(s->date[i]!='\0'){
        i++;
        j++;
    }
    s->Len = j;
}

?4.在主函數(shù)中實(shí)現(xiàn)調(diào)用

int main()
{
    String *s1;
    s1 = init_string();
    createstring(s1);
    printf("%s",s1->date);
    return 0;
}

?數(shù)據(jù)結(jié)構(gòu)--串的基本操作

四、字符串的匹配模式

?1.在主串中找子串第一次出現(xiàn)的位置

int stringindex(String *s1,String *s2)
{
    int i=0,j=0,k;
    while(i<s1->Len&&j<s2->Len){
        if(s1->date[i]==s2->date[j]){
            i++;
            j++;
        }else{
            i = i-j+1;
            j = 0;
        }
    }
    if(j>=s2->Len){
        k=i-s2->Len+1;
    }else{
        k=-1;//如果沒找到則返回值-1;
    }
    return k;
}

2.在主串中刪除子串

void deletestring(String *s,int i,int j)
{
    int k;
    if(i+j-1>s->Len){
        printf("所要?jiǎng)h除的子串越界!");
    }else{
        for(k=i+j-1;k<s->Len;k++,i++){
            s->date[i-1] = s->date[k];
        }
    s->Len = s->Len-j;
    s->date[s->Len]= '\0';
    }
}

在主函數(shù)中實(shí)現(xiàn) 如下:

int main()
{
    String *s1;
    String *s2;
    s1 = init_string();
    s2 = init_string();
    createstring(s1);//創(chuàng)造一個(gè)主串
    createstring(s2);//創(chuàng)造一個(gè)子串
    int a = stringindex(s1,s2);//得到子串的位置
    int b = s2->Len;//得到子串的長(zhǎng)度從而刪除
    deletestring(s1,a,b);
    printf("%s",s1->date);
    return 0;
}

數(shù)據(jù)結(jié)構(gòu)--串的基本操作

3.在主串中插入子串?

void insertstring(String *s1,String *s2,int i)//在第i位中插入
{
    int j;
    if(i>s1->Len+1){
        printf("插入的位置錯(cuò)誤");
    }else if(s1->Len+s2->Len>maxsize){
        printf("兩串長(zhǎng)度超過存儲(chǔ)空間長(zhǎng)度");
    }else{
        for(j=s1->Len-1;j>=i-1;j--){//將第i位開始的字符各向后移動(dòng)s2串長(zhǎng)度
            s1->date[s2->Len+j] = s1->date[j];
        }
        for(j=0;j<s2->Len;j++){
            s1->date[i+j-1] = s2->date[j];//將子串s2插入到s1的第i個(gè)位置處
        }
        s1->Len = s1->Len+s2->Len-1;
        s1->date[s1->Len] = '\0';
    }
}

在主函數(shù)中實(shí)現(xiàn) 如下:

int main()
{
    String *s1;
    String *s2;
    s1 = init_string();
    s2 = init_string();
    createstring(s1);//創(chuàng)造一個(gè)主串
    createstring(s2);//創(chuàng)造一個(gè)子串
    int a = s1->Len;//得到主串的位置
    insertstring(s1,s2,a);
    printf("%s",s1->date);
    return 0;

數(shù)據(jù)結(jié)構(gòu)--串的基本操作

4.比較兩個(gè)串的大小?

void cmpstring(String *s1,String *s2)
{
    int i=0,flag=0;
    while(s1->date[i]!='\0'&&s2->date[i]!='\0'){
        if(s1->date[i]!=s2->date[i]){//兩串對(duì)應(yīng)的位置是否相等
            flag = 1;
            break;
        }else{
            i++;
        }
    }
    if(flag==0&&s1->Len==s2->Len){
        printf("兩串相等\n");
    }else{
        printf("兩個(gè)串不相等,兩串ASCII差值為%d\n",s1->date[i]-s2->date[i]);
        //不相等返回不同位置的ASCII碼差值
    }
}

?在主函數(shù)中實(shí)現(xiàn) 如下:

int main()
{
    String *s1;
    String *s2;
    s1 = init_string();
    s2 = init_string();
    creatstring(s1);
    creatstring(s2);
    cmpstring(s1,s2);
    return 0;
}

數(shù)據(jù)結(jié)構(gòu)--串的基本操作

?數(shù)據(jù)結(jié)構(gòu)--串的基本操作


五、總結(jié)

1、串的基本概念

串是一種特殊的線性表,規(guī)定每個(gè)數(shù)據(jù)元素僅由一個(gè)字符組成。串上的操作主要是針對(duì)串的整體或串的一部分子串進(jìn)行的。

2、串的存儲(chǔ)結(jié)構(gòu)

串是字符型的線性表,與線性表類似,串也有兩種基本存儲(chǔ)結(jié)構(gòu):順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)。由于串的特殊性。主要運(yùn)用順序存儲(chǔ)。

3、串的運(yùn)算實(shí)現(xiàn)

串的基本運(yùn)算包括串的連接、插入、刪除、比較、尋找等,要求重點(diǎn)掌握串的定長(zhǎng)順序存儲(chǔ)的基本算法。文章來源地址http://www.zghlxwxcb.cn/news/detail-415969.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)--串的基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】圖的基本操作

    【數(shù)據(jù)結(jié)構(gòu)】圖的基本操作

    一、問題描述 分別以鄰接矩陣和鄰接表作為存儲(chǔ)結(jié)構(gòu),實(shí)現(xiàn)以下圖的基本操作: 增加一個(gè)新結(jié)點(diǎn)v,Insert(G,v); 刪除頂點(diǎn)v及其相關(guān)的邊,Delete(G,v); 增加一條邊v,w,Insert(G,v,w); 刪除一條邊v,w,Delete(G,v,w); 二、設(shè)計(jì)思路 1、鄰接矩陣實(shí)現(xiàn): ????????鄰接矩陣實(shí)現(xiàn)圖的基本

    2024年02月06日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)之棧的基本操作

    數(shù)據(jù)結(jié)構(gòu)之棧的基本操作

    該順序棧涉及到了存儲(chǔ)整型數(shù)據(jù)的順序棧還有存儲(chǔ)字符型數(shù)據(jù)的順序棧 實(shí)現(xiàn)的功能有:入棧、出棧、判斷是否為空棧、求棧的長(zhǎng)度、清空棧、銷毀棧、得到棧頂元素 此外根據(jù)上述功能,編寫了數(shù)值轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)化八進(jìn)制)方法、括號(hào)匹配方法。 控制臺(tái)界面展示: 進(jìn)棧展示

    2024年01月23日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)---雙向鏈表的基本操作

    頭插法 遍歷鏈表 尾插法 頭刪法 尾刪法 按位置插入數(shù)據(jù) 按位置刪除數(shù)據(jù) dooublelinklist.c doublelinklist.h doublemain.c

    2024年02月22日
    瀏覽(96)
  • 數(shù)據(jù)結(jié)構(gòu)——單鏈表基本操作實(shí)現(xiàn) (c++)

    數(shù)據(jù)結(jié)構(gòu)——單鏈表基本操作實(shí)現(xiàn) (c++)

    單鏈表鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)是:用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素(這里存儲(chǔ)單元可以是連續(xù)的,也可以是不連續(xù)的),為了表示每個(gè)數(shù)據(jù)元素a與其直接后繼數(shù)據(jù)元素之間的邏輯關(guān)系,除了存儲(chǔ)信息本身外還要存儲(chǔ)一個(gè)指示其直接后繼的信息(地址). 這兩部分信

    2024年02月03日
    瀏覽(88)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈棧的基本操作(C語言)

    零零總總搜索了一些關(guān)于鏈棧的資料,了解了鏈棧的基本操作,一直覺得別人寫的代碼或多或少存在一些問題,所以打算自己寫一篇關(guān)于鏈棧的文章,也算是對(duì)所學(xué)知識(shí)的梳理和鞏固了。 首先說明本文使用C語言進(jìn)行鏈棧的基本操作,鏈棧是無頭結(jié)點(diǎn)的。這里補(bǔ)充說明一下,

    2024年02月05日
    瀏覽(26)
  • 【玩轉(zhuǎn)408數(shù)據(jù)結(jié)構(gòu)】線性表——定義和基本操作

    【玩轉(zhuǎn)408數(shù)據(jù)結(jié)構(gòu)】線性表——定義和基本操作

    ????????線性表是算法題命題的重點(diǎn),該類題目實(shí)現(xiàn)相對(duì)容易且代碼量不高,但需要最優(yōu)的性能(也就是其時(shí)間復(fù)雜度以及空間復(fù)雜度最優(yōu)),這樣才可以獲得滿分。所以在考研復(fù)習(xí)中,我們需要掌握線性表的基本操作,在平時(shí)多進(jìn)行代碼練習(xí)。當(dāng)然在考場(chǎng)上,我們并不一

    2024年02月19日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】隊(duì)列基本操作的實(shí)現(xiàn)(C語言)

    【數(shù)據(jù)結(jié)構(gòu)】隊(duì)列基本操作的實(shí)現(xiàn)(C語言)

    ?? 作者簡(jiǎn)介:一名在后端領(lǐng)域?qū)W習(xí),并渴望能夠?qū)W有所成的追夢(mèng)人。 ?? 個(gè)人主頁:蝸牛牛啊 ?? 系列專欄:??數(shù)據(jù)結(jié)構(gòu)、??C++ ?? 學(xué)習(xí)格言:博觀而約取,厚積而薄發(fā) ?? 歡迎進(jìn)來的小伙伴,如果小伙伴們?cè)趯W(xué)習(xí)的過程中,發(fā)現(xiàn)有需要糾正的地方,煩請(qǐng)指正,希望能夠與

    2024年02月16日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)——單鏈表上基本操作的實(shí)現(xiàn)

    1.按位序插入(帶頭結(jié)點(diǎn)) : ==ListInsert(L, i, e): ==在表L 中的第 i 個(gè)位置上插入指定元素 e = 找到第 i-1 個(gè)結(jié)點(diǎn) ( 前驅(qū)結(jié)點(diǎn) ) ,將新結(jié)點(diǎn) 插入其后;其中頭結(jié)點(diǎn)可以看作第 0 個(gè)結(jié)點(diǎn),故 i=1 時(shí)也適用。 typedef struct LNode{ ElemType data; struct LNode *next; }LNode, *LinkList; // 在第 i 個(gè)位置插入

    2024年01月21日
    瀏覽(91)
  • 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)4:二叉樹的基本操作

    數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)4:二叉樹的基本操作

    一、問題描述 運(yùn)用二叉鏈表實(shí)現(xiàn)二叉樹的基本操作,包括:創(chuàng)建二叉樹的存儲(chǔ)結(jié)構(gòu)、復(fù)制已有的二叉樹、計(jì)算已有的二叉樹的深度、先根序序列、中根序序列、后根序序列等。 輸入格式:AB#C##D## 二、實(shí)驗(yàn)?zāi)康?掌握二叉鏈表及二叉樹的基本操作。 三、實(shí)驗(yàn)內(nèi)容及要求 1、構(gòu)造

    2024年01月23日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包