IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法(七)串、数组、广义表 -> 正文阅读

[数据结构与算法]数据结构与算法(七)串、数组、广义表

串是内容受限的线性表(字符)。数组、广义表是线性结构的推广

:任意字符组成的有限序列

? ? ? ? 子串:任意连续的字符组成的子序列(子集)

? ? ? ? 串的顺序存储结构

#define MAXLEN255
typedef struct{
    char ch[MAXLEN+1];//一维数组
    int length;//串长
}SString

? ? ? ? 串的链式存储结构

#define SIZEX 80
typedef struct Chunk{
    char ch[SIZEX];
    struct Chunk *next;
}Chunk;

typedef struct{
    Chunk *head,*tail;
    int curlen;
}Lstring

? ? ? ? 串的模式匹配算法

? ? ? ? BF算法(暴力穷举)

int IndexBF(string S,string T){
    int i=1,i=1;
    while(i<=S.length && j<=T.length){
        if(S[i] == T[i]){ ++i;++j; }//进入下一个匹配
        else {i=i-j+2; j=1;}//主串和子串回溯到初始位置准备下次匹配
    }
    if(j>=T.length) return i-T.length;//成功,返回第一个字母的下标
    else return 0;//匹配不成功
}

? ? ? ? ? ? ? ? 总比较次数为:(n-m)*m+m = (n-m+1)*m

? ? ? ? ? ? ? ? 若m<<n则算法复杂度为O(n*m)

? ? ? ? KMP算法(原理是不需要回溯)

int IndexKMP(string S,string T,int pos){
    i=pos,j=1;
    while(i<S.length && j<T.length){
        if(j==0|S.ch[i] == T.ch[j]){ i++; j++;}
        else
            j=next[j];//i不后退,j后退
    }
    if(j>T.length) return i-T.length;//匹配成功
    else return 0;
}


void getNext(string T,int &next[]){
    i=1;    next[1]=0;    j=0;
    while( i<T.length){
        if(j==0 || ch[i]==T.ch[j]){
            ++i; ++j;
        }
        else
            j=next[j];
    }    
}

void getNextVal(string T,int &next[]){
    i=1;    next[1]=0;    j=0;
    while( i<T.length){
        if(j==0 || ch[i]==T.ch[j]){
            ++i; ++j;
            if(T.ch[i]!=T.ch[j]) nextval[i]=j;
            else nextval[i]=nextval[j];
        }
        else
            j=nextval[j];
    }    
}

? ? ? ? ? ? ? ? 获取next序列、value序列

?数组

? ? ? ? 相同类型的数据元素的集合。线性表是数组结构的特例,数组结构是线性表的扩展

? ? ? ? 特点:结构固定--定义后,维组和维界不再改变。

? ? ? ? 多维数组本质上是多个一维数组连续存储(图例为行序为主语言<C、cpp、java>)

? ? ? ? 特殊矩阵的压缩存储

? ? ? ? ? ? ? ? 常规存储:二维数组。特点:元素可以随机存取,矩阵运算简单;存储密度为1。

? ? ? ? ? ? ? ? 如果零元素较多/相同元素较多->矩阵的压缩存储

? ? ? ? ? ? ? ? 特殊矩阵如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵(非零元素低于5%)可以进行压缩

? ? ? ? ? ? ? ? 对称矩阵的压缩:只存储半个三角(上三角/下三角),占用空间n(n+1)/2

? ? ? ? ? ? ? ? ????????压缩后元素的下标为n(n+1)/2-1

? ? ? ? ????????三角矩阵的压缩存储(只有半个三角),占用空间同对称矩阵

? ? ? ? ? ? ? ? ?对角矩阵的压缩存储(使用二维数组存储)

? ? ? ? ? ? ? ? ?稀疏矩阵的压缩存储(三元组顺序表)

? ? ? ? ? ? ? ? ?????????三元组顺序表优点:便于进行依行顺序处理矩阵

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????缺点:不能随机存取

? ? ? ? ? ? ? ? 稀疏矩阵的十字链表压缩:

? ? ? ? ? ? ? ? ? ? ? ? 十字链表的结点如下:

rowcolvaluedownright

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? right指向同行中下一个非零元素,down指向同列中下一个非零元素

广义表

? ? ? ? 有限序列,每一个元素都可以是一个原子(单一元素),也可以是一个广义表(子表)

? ? ? ? ? ? ? ? 通常记作LS=(a1,a2...an)????????<大写字母表示广义表、小写字母表示原子>

? ? ? ? ? ? ? ? 表头:head(LS)=a1????????(可以是原子,也可以是子表)

? ? ? ? ? ? ? ? 表尾:tail(LS)=(a2,...an)? ? ? ? (表尾不是最后一个元素、而是一个子表)

? ? ? ? ? ? ? ? 长度:最外层括号中包含的元素个数

? ? ? ? ? ? ? ? 深度:广义表展开后所包含的所有括号的重数(原子深度为0,空表深度为1)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 例:A=(b,c)深度为1,B=(A,d)深度为2,C=(f,B,h)深度为3

? ? ? ? ? ? ? ? 广义表可以与其他广义表共享:B=(A)

? ? ? ? ? ? ? ? 广义表可以是一个递归表:F=(a, F?=(a,(a,...)))递归表深度是无穷值,长度有限(2)

? ? ? ? ? ? ? ? 广义表是多层次结构(可以用树表示)

? ? ? ? 广义表基本运算:? ? ? ? GetHead(L)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GetTail(L)

????????

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 17:08:43  更:2021-10-01 17:09:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:50:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码