赞
踩
字符串(string)是由n (n≥0) 个字符组成的有限序列。字符串简称为串,一般记为:s = "a0 a1 … an-1" 其中:
⊙s是串名;
⊙用双引号括起来的字符序列是串值;
⊙ai (0≤i<n)可以是ASCII码字符中的可打印字符,通常是字母、数字等字符;
⊙i称为字符ai 在串中的位置;
⊙n称为串的长度;n=0时,s称为空串。
⊙容易与空串相混淆的一种串是空格串,空格串是由一个或多个空格组成的串,如4个空格组成的空格串“ ”,它的长度是4,而空串的长度为0。
串中任意多个连续的字符组成的子序列称为该串的子串。子串在该串中的位置就是子串的首字符在该串中的位置。如果两个字符串长度相等,且它们对应位置的字符都相等,则称这两个字符串等。 在C++中,串值必须用一对双引号括起来,但双引号本身不属于串。而字符用单引号括来。串"w"和字符'w'是两个不同的概念,前者是字符串,后者是字符。串是一种线性结构,因此,串既可以用顺序存储结构来存储,也可以用链表存储结构来存储。由于每个字符占空间很小,只占8位二进制,所以串通常采用顺序存储结构存储,它比用链式存储结构存储效率高,实现起来也方便。
- char s1[ ] = "It is a car";
- char s2[ ] = "jeep";
- char s3[ ] = "car";
- int result; char s4[20] ,*p;
(1) 串长度 int strlen(char *str):
- cout << strlen(s1)<<endl; //输出11
- cout << strlen(s2)<<endl; //输出4
(2) 串拷贝 char *strcpy(char *str1,char *str2):
strcpy(s4,s2); //s4 = "jeep"
(3) 串连接 char *strcat(char *str1,char *str2):
strcat(s2,s3); //s2 = "jeepcar"
(4) 串比较 int strcmp(char *str1,char *str2):
- result = strcmp(s2,s3); //result>0
- result = strcmp(s2,s2); //result=0
- result = strcmp(s3,s2); //result<0
(5) 串中字符定位 char *strchr(char *str , char ch);
- p = strchr(s1 , 'c');//p指在s1中字符'c'首次出现的位置
- strcpy(p , s2); //s1 = "It is a jeep"
一维数组A(array)是n (n≥0)个相同数据类型的数据元素a0,a1, , an-1构成的有限线性序列。其中n叫做数组长度或数组大小,若n=0就是空数组。
二维数组:当每一个数组元素ai(0≤i≤n-1)本身又是一个一维数组时,则A就是一个二维数组。
m维数组:一个m(m≥2)维数组中的每一个数组元素是一个m-1维的数组。
假设二维数组a[m][n]的首地址为p,即a[0][0]的起始地址为p,每个元素占l个字节,以行序为主序存储方式来存储数组a,计算数组元素a[i][j]的地址loc(i,j)。因为在一维数组a中,第k个元素a[i]的地址是: loc(i) = d + (k-1) * l, 因此只要计算出a[i][j]是数组的第几个元素就可计算出loc(i, j)。 若设其为k,则有k = i*n+j+1,所以,loc(i, j) = p+ (i*n+j ) *l 更一般的公式:loc(i,j) = d + (k-1) * l,d 表示二维数组第1个元素的地址,k表示a[i][j]是第k个元素。
矩阵本身就是二维数组。对于一个矩阵,如果零元素较多,还是采用上一节所述的存储方式来存储的话,就会使得大量的存储空间存放同一个值零,从而造成事实上的存储空间的浪费。像这种零元素非常多的矩阵称为稀疏矩阵。因为稀疏矩阵是非零元素很少的矩阵,我们只要存储非零元素就行了。但由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须同时记下它所在的行和列的位置(i,j)。反之,一个三元组(i,j,aij)唯一确定了矩阵A的一个非零元。因此,稀疏矩阵可由表示非零元的三元组及其维数唯一确定。整个稀疏矩阵的存储结构既可以采用顺序结构存储,也可以采用链式结构存储。
广义表LS是由n≥0个表元素α1 ,α2 , … , αn 组成的有限序列,其中表元素αi (1≤i≤n) 或者是一个数据元素 (可称为单元素或原子),或者是一个表(称为子表)。记作 LS = (α1 ,α2 , … , αn ) 其中LS是表名,表的长度为n。长度为0的广义表为空表。一般用大写字母表示表名,用小写字母表示数据元素。如果n≥1,则称α1 为广义表LS的表头(head),称(α2 , … , αn )为广义表LS的表尾(tail)。
广义表的表尾始终是一个广义表。
广义表的定义是递归的,因为在表的描述中又用到了表。
广义表的例子:
(1) A=( ) 空表,它的长度为零。
(2) B=(e) 单元素表,head(B)=e,tail(B)=( )。
(3) C=(a,(b, c, d)) 长度为2,两个表元素分别为单元素a和子表(b, c, d)。head(C)=a ,tail(C)= ((b ,c, d))。
(4) D=(A, B, C) 长度为3,三个表元素都是子表。head(D)=A,tail(D)=(B , C)。
(5) E= (a, E) 长度为2,E是一个递归表,它对应于无限表E = (a,(a, (a ,… )))。head (E)=a, tail(E)=(E)。
广义表中括号的重数即为广义表深度(空表的深度为1)
depth(A)=1,depth(B)=1,depth(C)=2, depth(D)=3, depth(E) 为无穷大
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。