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

高級(jí)數(shù)據(jù)結(jié)構(gòu)及應(yīng)用之使用bitmap進(jìn)行字符串去重的方法實(shí)例

 更新時(shí)間:2019年02月18日 09:00:40   作者:Inside_Zhang  
今天小編就為大家分享一篇關(guān)于高級(jí)數(shù)據(jù)結(jié)構(gòu)及應(yīng)用之使用bitmap進(jìn)行字符串去重的方法實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

bitmap 即為由單個(gè)元素為 boolean(0/1, 0 表示未出現(xiàn),1 表示已經(jīng)出現(xiàn)過)的數(shù)組。

如果C/C++ 沒有原生的 boolean 類型,可以用 int 或 char 來作為 bitmap 使用,如果我們要判斷某字符(char)是否出現(xiàn)過

使用 int 作為 bitmap 的底層數(shù)據(jù)結(jié)構(gòu),bitmap 即為 int 數(shù)組,一個(gè) int 長度為 32 個(gè) bit 位,

  • c / 32 ⇒ bitmap 中的第幾個(gè) int
  • c % 32 ⇒ bitmap 中的某 int 中的第幾個(gè) bit 位;

使用 char 作為 bitmap 的底層數(shù)據(jù)結(jié)構(gòu),bitmap 即為 char 數(shù)組,一個(gè) char 長度為 8 個(gè) bit 位;

  • c / 8 ⇒ bitmap 中的第幾個(gè) char
  • c % 8 ⇒ bitmap 中某 char 中的第幾個(gè) bit 位;

ASCII

  • A-Z:65-90
  • a-z:97-122

如果使用 char 作為 bitmap 的替代底層數(shù)據(jù)結(jié)構(gòu),為了實(shí)現(xiàn)字符串的去重需要 char 的長度為多少呢?122/8+1 ⇒ 16。如果使用 int 作為 bitmap 的底層實(shí)現(xiàn),則需要 int 數(shù)組的長度為 122/32 + 1 ⇒ 4

1. int 作為底層數(shù)據(jù)結(jié)構(gòu)

void dedup(const char* src, char* dst)
{
  unsigned int exists[4] = { 0 };
  int i = 0, j = 0;
  unsigned int mask;
  char c;
  while (src[i])
  {
    c = src[i];
    mask = 1 << (c % 32);
    if ((exists[c / 32] & mask) == 0)
    {
      dst[j++] = c;
      exists[c / 32] |= mask;
    }
    i++;
  }
  dst[j] = '\0';
}

2. 使用 char 作為底層數(shù)據(jù)結(jié)構(gòu)

void dedup(const char* src, char* dst)
{
  unsigned char exists[16] = { 0 };
  int i = 0, j = 0;
  unsigned int mask;
  char c;
  while (src[i])
  {
    c = src[i];
    mask = 1 << (c % 8);
    if ((exists[c / 8] & mask) == 0)
    {
      dst[j++] = c;
      exists[c / 8] |= mask;
    }
    i++;
  }
  dst[j] = '\0';
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論

白沙| 昌黎县| 天柱县| 城口县| 鹿泉市| 如皋市| 阜宁县| 富锦市| 沭阳县| 伊宁县| 乐昌市| 卢湾区| 赤峰市| 海盐县| 宾阳县| 普洱| 嘉定区| 东丽区| 柳州市| 梅州市| 万盛区| 宣化县| 崇信县| 乌拉特后旗| 高碑店市| 北辰区| 澜沧| 亚东县| 景德镇市| 宁陵县| 渝中区| 封丘县| 邳州市| 巨鹿县| 徐闻县| 锡林浩特市| 德惠市| 盘锦市| 宁阳县| 息烽县| 海原县|