数据结构概述 第四章

                    第四章  字符串和多维数组

一.字符串

1.字符串:是零个或多个字符组成的有限序列。(只包含空格的串称为空格串)

注:字符串是以字符作为数据元素的线性表。

2.空串:长度(串中所包含的字符个数称为串的长度)为0的串。

3.子串:字符串中任意个连续的字符组成的子序列。

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

5.字符串是数据元素为单个字符的线性表,一般采用顺序存储。

6.表示串的长度的方法:

(1)用一个变量来表示串的长度。

(2)在串尾存储一个不会在串中出现的特殊字符作为字符串的终结符,例如在C++语言中用`\0`来表示串的结束,这种存储方法不能直接得到串的长度,而是通过判断当前字符是否为`\0`来确定串是否结束,从而求得串的长度。

(3)用数组的0号单元存放串的长度,串值从1号单元开始存放。

7.模式匹配:给定两个字符串S=s1s2s3s4...sn”和T=t1t2t3t4...tm”,在主串S中寻找子串T的过程。(T称为模式)

8.朴素的模式匹配算法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;

}

二.多维数组

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

2.每个数据元素称为一个数据元素。

二维数组的每个元素含有两个下标,需将二维关系映射为一维关系。常用的映射方法有两种:以行序为主序(按行优先)和以列序为主序(按列优先)。

3.按行优先存储的基本思想是:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素。

三.矩阵的压缩存储

1.特殊矩阵:阶数很高的矩阵,同时在矩阵中有很多值相同的元素并且他们的分布有一定的规律。

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

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

四.应用举例

1.字符串的应用举例

凯撒加密算法KaiSai

Void KaiSa(char S[],char T[],int k)

{

For(i=0;S[i]!=`\0`;i++)

T[i]=`a`+(S[i]-`a`+k)%26;

}

2.数组的应用举例-------幻方

奇数阶幻方算法Square

Void Square(int a[][],int n)

{

I=0;j=n/2;

A[i][j]=1;

For(k=2;k<=n*n;k++)

{

iTemp=i;jTemp=j;

I=(i-1+n)%n;

J=(j-1+n)%n;

If(r[i][j]>0)

{

I=(iTemp+1)%n;

J=jTemp;

}

R[i][j]=k;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值