最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言 數(shù)據(jù)結構與算法之字符串詳解

 更新時間:2022年01月10日 09:16:54   作者:玄澈_  
這篇文章將帶大家深入了解C語言數(shù)據(jù)結構與算法中的字符串,文中主要是介紹了字符串的定義、字符串的比較以及一些串的抽象數(shù)據(jù)類型,感興趣的可以學習一下

串的定義

零個或多個字符組成的有限序列

串的比較 

串的比較實際上是在比較串中字符的編碼

存在某個k < min(n,m),使得ai = bi (i = 1,2,3,4..k)

如果 ak < bk  -->  那么srt1 < srt2 (反之也成立)

除去相等的字符,在第一個不相等的字符位置以Ascii碼進行比較

串的抽象數(shù)據(jù)類型

串的順序存儲結構示意圖

串的順序存儲結構是用一組地址連續(xù)的存儲單元來存儲串中的字符序列 

typedef struct sqString{
    char* ch;  //若串為空,則按串長分配存儲區(qū)  
               //否則ch = NULL
    int length;//串長
}sqString;

串的初始化

相關定義初始化

/** 狀態(tài)碼  **/
#define TRUE 1
#define FALSE 0
#define EQ 0
#define GT 1  //大于
#define LT -1 //小于

定長類初始化

#define MAX_SIZE 1024
typedef struct{
    char ch[MAX_SIZE + 1];  
    //定長方式實現(xiàn)了字符串的順序結構--缺點是浪費空間
    int length;
 
}SString;

串的堆式順序存儲結構(Heap)

/** 串的堆式順序存儲結構(Heap)**/
typedef struct{
    char * ch;  
    //如果是非空串,那么就按照指定長度分配內存,否則ch就指向NULL
    int length;   //串當前長度
}HString;

初始化堆字符串 

賦值操作

/** 為串str賦值,值為字符串常量chars **/
void StrAssign_HeapString(HString * str,char * chars){
    int len = strlen(chars);
    if(!len) return ERROR;
    InitString_HeapString(str);
    //動態(tài)為字符串分配空間
    str->ch = (char*)malloc(len * sizeof(char));
    if(!str->ch){
        exit(OVERFLOW); //內存溢出,分配失敗
    }
    //逐個將字符串輸入所分配的空間中
    for(int i = 0;i < len ; i++)
    {
        str->ch[i] = chars[i];
    }
    str->length = len;  //將長度賦值
    return OK;    
}

比較兩個堆字符串的大小

str1 == str2 返回0 ; str1 < str2 返回-1 ; str1 > str2 返回1

Status Strcmp_HeapString(HString * str1,HString * str2){
    for(int i = 0;i < str->length && i < str2->length; i ++){
        //遇到不同的字符就直接比較Ascii
        if(str->ch[i] != str[2]->ch[i]){
                //大于則返回整數(shù),小于則返回負數(shù)
            return str->ch[i] - str[2]->ch[i];
        }
    }
    //字符都相等但是長度不等,就比較長度
    return str1->length - str2->length;
}

到此這篇關于C語言 數(shù)據(jù)結構與算法之字符串詳解的文章就介紹到這了,更多相關C語言 字符串內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++中delete和delete[]的區(qū)別說明

    C++中delete和delete[]的區(qū)別說明

    一直對C++中的delete和delete[]的區(qū)別不甚了解,今天遇到了,上網查了一下,得出了結論。希望本文可以對你有所幫助
    2013-02-02
  • C++類與對象深入之運算符重載與const及初始化列表詳解

    C++類與對象深入之運算符重載與const及初始化列表詳解

    運算符是程序中最最常見的操作,例如對于內置類型的賦值我們直接使用=賦值即可,因為這些編譯器已經幫我們做好了,但是對象的賦值呢?能直接賦值嗎
    2022-06-06
  • MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系

    MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系

    這篇文章主要介紹了VC++中MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系,需要的朋友可以參考下
    2015-01-01
  • C語言超全面define預處理指令的使用說明

    C語言超全面define預處理指令的使用說明

    C語言里可以用#define定義一個標識符來表示一個常量。特點是:定義的標識符不占內存,只是一個臨時的符號,預編譯后這個符號就不存在了,也不做類型定義。預編譯又叫預處理
    2022-04-04
  • C語言之選擇分支語句詳解

    C語言之選擇分支語句詳解

    大家好,本篇文章主要講的是C語言之選擇分支語句詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++實現(xiàn)LeetCode(65.驗證數(shù)字)

    C++實現(xiàn)LeetCode(65.驗證數(shù)字)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(65.驗證數(shù)字),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)動態(tài)順序表的實現(xiàn)代碼

    C語言實現(xiàn)動態(tài)順序表的實現(xiàn)代碼

    這篇文章主要介紹了C語言實現(xiàn)動態(tài)順序表的實現(xiàn)代碼的相關資料,動態(tài)順序表在內存中開辟一塊空間,可以隨我們數(shù)據(jù)數(shù)量的增多來擴容,需要的朋友可以參考下
    2017-08-08
  • 詳解C++ 創(chuàng)建文件夾的四種方式

    詳解C++ 創(chuàng)建文件夾的四種方式

    這篇文章主要介紹了C++ 創(chuàng)建文件夾的四種方式,本文示例都是在 E:\database 路徑下創(chuàng)建一個叫做 testFolder 的文件夾,文章通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-11-11
  • C語言模擬實現(xiàn)memmove的示例代碼

    C語言模擬實現(xiàn)memmove的示例代碼

    memmove函數(shù)用于拷貝字節(jié),如果目標區(qū)域和源區(qū)域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區(qū)域的字節(jié)拷貝到目標區(qū)域中,但復制后源內容會被更改。本文主要介紹了C語言模擬實現(xiàn)memmove的示例代碼,需要的可以參考一下
    2022-12-12
  • C++中std::vector的6種初始化方式

    C++中std::vector的6種初始化方式

    這篇文章主要介紹了C++中std::vector的6種初始化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

哈密市| 杭锦后旗| 鄯善县| 文成县| 宿州市| 长顺县| 西城区| 花莲县| 望奎县| 建德市| 连州市| 宝清县| 双流县| 乌拉特中旗| 本溪市| 武鸣县| 南江县| 东乌| 科技| 合肥市| 永胜县| 仙居县| 清水河县| 大冶市| 荥阳市| 彝良县| 镇康县| 汉源县| 湘乡市| 阿尔山市| 新营市| 沾益县| 星子县| 汉阴县| 正宁县| 湟源县| 陕西省| 佛坪县| 昭通市| 交城县| 长顺县|