数据结构c++ 随堂笔记4

来源:互联网 发布:windows热键设置 编辑:程序博客网 时间:2024/06/06 14:14

串的逻辑结构

 

字符串:零个或多个字符组成的有限序列。

字符串中任意个连续字符组成的子序列称为该串的子串。

子串第一个字符在主串中的序号称为子串在主串中的位置。

非空串通常记为:

      S=" s1 s2…… sn "

其中:S是串名,双引号是定界符,双引号引起来的部分是串值 ,si(1≤in)是一个任意字符。

微机上常用的字符集是标准ASCII码,由 7 位二进制数表示一个字符,总共可以表示 128 个字符。扩展ASCII码由 8 位二进制数表示一个字符,总共可以表示 256 个字符,足够表示英语和一些特殊符号,但无法满足国际需要。Unicode由 16 位二进制数表示一个字符,总共可以表示 216个字符,即6万5千多个字符,能够表示世界上所有语言的所有字符,包括亚洲国家的表意字符。为了保持兼容性,Unicode字符集中的前256个字符与扩展ASCII码完全相同。 

 

串的数据对象约束为某个字符集

串的比较:通过组成串的字符之间的比较来进行的。

给定两个串:X="x1x2xn"和Y="y1y2ym",则:

1. 当n=mx1=y1,…,xn=ym时,称X=Y

2. 当下列条件之一成立时,称XY

nmxi=yi(1≤ in);

⑵存在k≤min(m,n),使得xi=yi(1≤ik-1)且xkyk

串的抽象数据类型定义

⑴ StrLength (s):求串s的长度。

⑵ StrAssign (s1, s2):赋值,将s2的值赋值给串s1。

⑶ StrConcat (s1, s2, s):连接,将串s2放在串s1的后面连接成一个新串s。

⑷ SubStr (s, i, len):求子串,返回从串s的第i个字符开始取长为 len 的子串。

⑸ StrCmp (s1, s2):串比较,若s1=s2,返回0;若s1<s2, 返回-1;若s1>s2, 返回1。

⑹ StrIndex (s, t):定位,返回子串t在主串s中首次出现的位置。若t不是s的子串,则返回0。

⑺ StrInsert (s, i, t):插入,将串t插入到串s中的第i个位置。

⑻ StrDelete (s, i, len):删除,在串s中删除从第i个字符开始的连续len个字符。

⑼ StrRep (s, t, r):替换,在串s中用串r替换所有与串t相等的子串。

模式匹配:给定主串S="s1s2sn"和模式T="t1t2tm",在S中寻找T的过程称为模式匹配。如果匹配成功,返回TS中的位置,如果匹配失败,返回0。

基本思想:从主串S的第一个字符开始和模式T 的第一个字符进行比较,若相等,则继续比较两者的后续字符;否则,从主串S的第二个字符开始和模式T的第一个字符进行比较,重复上述过程,直到T中的字符全部比较完毕,则说明本趟匹配成功;或S中字符全部比较完,则说明匹配失败。

 

模式匹配问题的特点:

⑴ 算法的一次执行时间不容忽视:问题规模通常很大,常常需要在大量信息中进行匹配;

⑵ 算法改进所取得的积累效益不容忽视:模式匹配操作经常被调用,执行频率高。

 

 

给定两个字符串S和T,在主串S中寻找子串T的过程称为模式匹配。T称为模式。

BF算法:int BF(char S[ ], char T[ ])

{

     i=0; j=0;  

    while (S[i]!='\0'&&T[j]!='\0')

    {

         if (S[i]==T[j]) {

             i++;   j++;

         } 

         else {

             i=i-j+1;    j=0;

         }  

     }

     if (T[j]=='\0') return (i-j+1);  

     else return 0;

}

int BF(charS[ ], char T[ ])

{

     i=0; j=0;start=0;  

    while (S[i]!='\0'&&T[j]!='\0')

    {

         if (S[i]==T[j]) {

             i++;   j++;

         } 

         else {

             start++;  i=start; j=0;

         }  

     }

     if (T[j]=='\0') returnstart;  

     else return 0;

}

数组是由类型相同的数据元素构成的有序集合。

数组一般不执行插入和删除操作。

数组的基本操作:存取和修改。这两种操作在根本上对应一种操作,即寻址。

特殊矩阵:在矩阵中有很多值相同的元素并且它们的分布有一定的规律。

稀疏矩阵:矩阵中有很多零元素。

压缩存储的基本思想:为多个值相同的元素只分配一个存储空间。对零元素不分配存储空间。

三元组表:将稀疏矩阵的非零元素对应的三元组所构成的集合,按行优先的顺序排列成一个线性表。

0 0
原创粉丝点击