您的位置:逆风者 数据结构 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:9 来源:未知

教学目的: 掌握串的几种实现方法

教学重点: 定长顺序存储表示法 堆分配存储表示法

教学难点: 堆分配存储表示法

授课内容:

逆@风@者

一、复习串的定义

串的定义

二、定长顺序存储表示

类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列.

#define MAXSTRLEN 255

typedef unsigned char SString[MAXSTRLEN 1] //0号单元存放串长

串的实际长度可在这予定义长度的范围内随意,超过予定义长度的串值则被舍去

串长可用下标为0的数组元素存储,也可在串值后设特殊标记

a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
...
a[n]
3
a
b
c
pascal
a
b
c
\0
c

1串联接的实现Concat(&T,S1,S2)

假设S1,S2和T都是SString型的串变量,且串T是由串S1联结串S2得到的,即串T的值的前一段和串S1的值相等,串T的值的后一段和串S2的值相等,则只要进行相应的"串值复制"操作即可,对超长部分实施"截断"操作

以下是串联接可能出现的三种情况:

S1 S2 T 4 2 6 a d a b e b c c d d e f

S1,S2串长和小于最大值

S1 S2 T 6 6 8 a g a b h b c i c d j d e k e f l f g h

S1,S2串长和超过最大串长

S1 S2 T 8 2 8 a i a b j b c c d d e e f f g g h h

S1串长已等于最大串长

算法描述如下:

Status Concat(SString &T,SString S1,SString S2){

if(S1[0] S2[0]<=MAXSTRLEN){

T[1..S1[0]]=S1[1..S1[0]];

T[S1[0] 1..S1[0] S2[0]]=S2[1..S2[0]];

T[0]=S1[0] S2[0]uncut=TRUE;

}

else if(S1[0]<MAXSTRSIZE){

T[1..S1[0]]=S1[1..S1[0]];

T[S1[0] 1..MAXSTRLEN]=S2[1..MAXSTRLEN-S1[0]];

T[0]=MAXSTRLEN;uncut=FALSE;

}

else{

T[0..MAXSTRLEN]=S1[0..MAXSTRLEN];

uncut=FALSE;

}

return uncut;

}

三、堆分配存储表示

这种存储表示的特点是,仍以一组地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配而得

在C语言中,存在一个称之为堆的自由存储区,并由C语言的动态分配函数malloc()和free()来管理.利用函数malloc()为每个新产生的串分配一块实际串长所需存储空间,为处理方便,约定串长也作为存储结构的一部分

typedef struct{

char *ch;//若是非空串,则按串长分配存储区,否则ch为NULL

int length; //串长度

}HString

Status StrInsert(HString &S,int pos,HString T){

if(pox<1||pos>S.length 1) return ERROR;

if(T.length){

if(!(S.ch=(char *)realloc(S.ch,(S.length T.length)*sizeof(char))))

exit(OVERFLOW);

for(i=S.length-1;i>=pos-1;--i)

S.ch[i T.length]=S.ch[i];

S.ch[pos-1..pos T.lenght-2]=T.ch[0..T.length-1];

S.length =T.length;

}

return OK;

}

四、总结

思考两种存储表示方法的优缺点

相关文章

数据结构教程 第八课 线性表的链式表示与实
数据结构教程 第十七课 实验三:栈的表示与
数据结构教程 第三十三课 哈希表(二)
数据结构教程 第一课 数据结构的基本概念和
五子棋算法
数据结构教程 第三十九课 索引文件
数据结构教程 第十四课 串的定义
数据结构教程 第二十三课 二叉树的存储结构
C语言完成一个学生成绩管理程序
数据结构教程 第二十九课 静态查找表(一)
数据结构教程 第三十四课 插入排序,快速排
数据结构教程 第十八课 数组的顺序表示与实
数据结构教程 第七课 实验一 线性表的顺序存
数据结构教程 第二课 抽象数据类型的表示与
二叉树基本操作的程序实现
数据结构教程 第三十七课 实验八 排序实验
数据结构教程 第二十八课 图的存储结构
数据结构教程 第十一课 栈的应用
数据结构教程 第十二课 实验二 循环链表实验
数据结构教程 第三十八课 文件概念,顺序文

相关评论


本文章所属分类:首页 数据结构

  热门关键字: