C语言数据结构总复习(划重点):串、数组

学习目标:

总复习数据结构:串、数组

为备考划重点自用,不喜勿喷。


一、串的定义和实现

1.串中字符的个数称为串的长度。n=0时的串成为空串(用\phi表示)。

2.串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串成为主串。

3.子串在主串中的位置以子串的第一个字符在主串中的位置来表示。

4.串的定长顺序存储表示:

typedef struct
{
    char ch[maxsize];
    int length;//串的实际长度
}sstring;

5.串的块链存储表示:

typedef struct Lstring
{
    char ch[maxsize];
    struct Lstring *next;
}Lstring;

类似于线性表的链式存储结构,每个结点既可存放一个字符,也可存放多个字符,每个结点称为块。最后一个结点占不满时通常用“#”补上。

6.串的基本操作:

1.int StringAssign(string *S, char chs[]) //生成一个其值等于字符串常量chs的串S

2.void StringCopy(string *S1, string *S2) //将串S2复制到串S1

3.int LengthString(string *S) //求串S的长度

4.int StringCompare(string *S1, string *S2) //比较串S1和串S2 ,若S1=S2返回0;若S1>S2,返回1;若S1 < S2,返回-1

5.int ConcatString(string *S, string *S1, string *S2) //用S返回由S1和S2连接而成的新串

6.int SubString(string *Sub, string *S, int pos, int len) //用Sub返回串S的第pos个字符起长度为len的子串

7.int StrInsert(string *S1, int pos, string *S2) //在串S1的第pos个字符之前插入串S2

8.int StrDelete(string *S, int pos, int len) //从串S中删除第pos个字符起长度为len的子串

9.int Index(string *S, string *T,int pos) //返回子串T在主串S中第pos个字符之后的位置,若不存在,返回0

二、串的模式匹配

1.简单的模式匹配算法

定长顺序存储结构

int index(sstring s,sstring t)
{
	int i=1,j=1;
	while(i<=s.length&&j<=t.length)
	{
		if(s.ch[i]==t.ch[j])//继续比较后续字符 
		{
			i++;
			j++;
		}
		else//回溯 
		{
			i=i-j+2;
			j=1;
		}
	}
	if(j>t.length)
		return i-t.length;
	else
		return 0;
} 

三、数组

 

四、习题

1.在文本编辑程序中,查找某一特定单词在文本中出现的位置,可以利用串的()运算

【解答】模式匹配

 

2.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( )。
A.求子串   B.联接 C.匹配  D.求串长

【解答】C 

 

3.数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。

【解答】存取,修改,顺序存储

【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。除了初始化和销毁之外,在数组中通常只有存取和修改两种操作

 

4.将数组称为随机存取结构是因为( )

A 数组元素是随机的           

B 对数组任一元素的存取时间是相等的 

C 随时可以对数组进行访问     

D 数组的存储结构是不定

【解答】B 

 

5.下面( )不属于特殊矩阵。

   A对角矩阵    B三角矩阵    C稀疏矩阵    D对称矩阵

【解答】C

 

6.假设以行序优先将一个n阶的3对角矩阵压缩存储到一维数组Q中,则数组Q的大小至少为()

【解答】 3n-2

【分析】第1行和第n行是2个非零元素,其余每行的非零元素都要是3个,则需存储的元素个数为3n-2。

思考:假设以行序优先将一个n阶的5对角矩阵压缩存储到一维数组Q中,则数组Q的大小至少为?(5n-6)

 

7.二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要( )个字节,A的第8列和第5行共占( )个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。

A90    B 180    C 240    D540   E  108   F114  G54

H  A[8][5]   I  A[3][10]  J  A[5][8]    K  A[4][9]

【解答】D,E,K

【分析】数组A为9行10列,共有90个元素,所以,存放A至少需要90×6=540个存储单元;第8列和第5行共有18个元素(注意行列有一个交叉元素),所以,共占108个字节;元素A[8][5]按行优先存储的起始地址为d+8×10+5=d+85,设元素A[i][j]按列优先存储的起始地址与之相同,则d+j×9+i=d+85,解此方程,得i=4,j=9。

 

8.设二维数组A的维数界偶定义为[1‥8,0‥10],起始地址为LOC,每个元素占2L个存储单元,以行序为主序存储方式下,某数据元素的地址为LOC+50L,则在列序为主序存储方式下,该元素的存储地址为(  )。A.LOC+28L     B.LOC+36L     C.LOC+50L     D.LOC+52L

【解答】D

【分析】若行下标从1开始,列下标从0开始。

按行序为主:

    LOC[aij]=LOC[a00]+[(i-1)´n+j]´2L

i=1,..8;    j=0,1, …,10。

由题意知道:(i-1)´11+j=25,因此 i=3, j=3。

按列序为主,LOC[aij]=LOC[a11]+[j´m+(i-1)]´2L,Loc[a33]=LOC+(3´8+2) ´ 2L          

 

9.串是一种特殊的线性表,其特殊性体现在()。

A.可以顺序存储

B.数据元素是一个字符

C.可以链接存储

D.数据元素可以是多个字符

【解答】B

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值