文学研究助手数据结构课程设计Word文档下载推荐.doc
《文学研究助手数据结构课程设计Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《文学研究助手数据结构课程设计Word文档下载推荐.doc(19页珍藏版)》请在冰豆网上搜索。
1.定义“单词”类型:
ADTAword{
数据对象:
D={Si|Si∈标准c字符串集合,i=1,2,3,…….,n,n≥0}
数据关系:
R1={<
Si-1,Si>
}|Si-1,Si∈D,i=1,2,3,…..,n}
基本操作:
NewWord(WordType*nw,Sequencecha)
初始条件:
cha为字符序列;
操作结果:
生成一个其值为给定字符序列的单词;
WordCmp(WordTypewd1,WordTypewd2)
单词wd1和单词wd2已存在;
若wd1<
wd2,则返回-1;
若wd1=wd2,则返回0;
若wd1>
wd2,则返
回1;
PrintWord(WordTypewd)
单词wd已存在;
在计算机终端上显示单词wd;
}ADTAWord
2.定义有序表类型:
ADTOrderList{
D={Si|Si∈AWord,i=1,2,3,…….,n,n≥0}
}|Si-1,Si∈D,Si-1<
S,i=1,2,3,…..,n}
基本操作:
InitList(OrderList*L)
构造一个空的有序表;
DestroyList(OrderList*L)
有序表L已存在;
销毁L的结构,并释放所占空间;
LocateElem(OrderListL,ElemTypee,LinkType*q)
若有序表L中存在元素e,则q指示L中第一个值为e的元素的位置,
并返回函数值FRUE;
否则q指示第一个大于e的元素的前驱的位置,
并返回函数值FALSE;
InsertAfter(OrderList*L,LinkTypeq,LinkTypes)
有序表L已存在,q指示L中一个元素;
在有序表L中q指示的元素之后插入元素s;
ListCompare(OrderListLa,OrderListLb,EqelemList*s)
有序表La和Lb已存在;
以s返回其中相同元素;
}ADTOrderList
3.定义单词文本串文件类型如下:
ADTTextString{
D={Si|Si∈标准c字符集,i=1,2,3,…….,n,n≥0};
D中字符被“换行符”分割成若干行,每一行的字符间满足下列关系:
R1={<
基本操作:
Initialization(FILE**fr)
初始条件:
文件fr已存在;
操作结果:
打开文件fr,设定文件指针指向文件中第一行第一个字符;
GetAWord(FILE*f,Sequence*st)
文件f已打开;
从文件指针所指字符起提取一个“单词st”;
ExtractWord(FILE*f,OrderList*ta)
文件f已打开,文件指针指向文件f中某一行的第一个字符;
提取该行中所有单词,并构成单词的有序表ta,本操作结束时,文件指针
指向文件f中下一行的第一个字符;
match(FILE*f,OrderListpat,ResultTypers)
文件f已打开,文件指针指向文件f中第一个字符;
pat为包含所有待查
询单词的有序表;
rs为查询结果;
}ADTTextString
4.本程序包含四个模块:
1)主程序模块:
主函数设计如下
intmain(){
输入信息和文件初始化;
生成测试目标词汇表;
统计文件中每个待测单词出现的次数和位置;
输出测试结果;
};
2)单词单元模块-------实现单词类型;
3)有序表单元模块--------实现有序表类型;
4)单词文本串文件单元模块------实现文本串文件类型;
主程序模块
各模块间的调用关系如下:
文本文件单元模块
有序表单元模块-
单词单元模块
四、详细设计
1、主程序中的宏定义:
#defineMAXSIZE1000 //字符空间的最大容量
#defineMAXLEN20//单词的最大长度
#defineMAXNUM16 //一行中单词最多个数
#defineFALSE0
#defineTRUE1
2、存储结构
/**
* 堆结构的定义
*/
typedefstruct{
charstores[MAXSIZE];
intfreep;
/*当前可用空间开始位置*/
}HeapSpace;
HeapSpacesp;
* 单词数据类型定义
typedefstruct{//单词在堆中的位置描述
intstadr;
/*单词在对空间中的开始位置*/
intlen;
/*单词长度*/
}WordType;
typedefstruct{//单词描述
charch[MAXLEN];
/*单词字符串*/
intsize;
/*单词长度*/
}Sequence;
* 有序表类型定义
typedefWordTypeElemType;
typedefstructNodeType{//单词有序表结点定义
ElemTypedata;
structNodeType*next;
}NodeType,*LinkType;
typedefstruct{//单词有序表定义
LinkTypehead;
/*有序表头指针*/
LinkTypetail;
/*有序表尾指针*/
/*有序表结点个数*/
}OrderList;
* 记录一行中匹配成功单词在目标词汇表中的位置
inteqelem[MAXNUM];
/*单词在目标词汇表中的位置*/
intlast;
/*匹配成功单词的个数*/
}EqelemList;
* 文件测试相关的数据类型定义
typedefstructNode{//单词在文件中的位置
intelem;
/*被测单词在文件中的行号*/
structNode*next;
/*指向下一个行号结点的指针*/
}Node,*Link;
typedefstruct{//单词统计分析记录结构定义
WordTypedata;
/*被测试的单词*/
intcount;
/*在文件中出现的次数*/
LinkNext;
/*记录出现的所有行号的脸表头指针*/
}HeadNode;
* 文本文件测试结果记录定义
typedefHeadNodeResultType[MAXNUM];
typedefintstatus;
3、主要算法设计:
/*---------------------与单词相关的函数---------------------*/
/*------------------------------------------------------------------*/
/*定义新单词函数*/
/*功能:
把新单词放入堆中*/
/*参数:
WordType*nw--单词描述信息指针*/
/*Sequencecha--单词信息*/
/*返回值:
操作成功与否的状态信息*/
/*0--操作失败,空间不足;
1--操作成功*/
/*--------------------------------------------------------------*/
statusNewWord(WordType*nw,Sequencecha)
{
inti,k;
if(sp.freep+cha.size>
=MAXSIZE)
{
printf("
HeapFull!
\n"
);
getchar();
return0;
}
else
{
i=sp.freep;
sp.freep=sp.freep+cha.size;
for(k=0;
k<
cha.size;
k++)sp.stores[i+k]=cha.ch[k];
nw->
stadr=i;
len=cha.size;
return1;
}
/*------------------------------回到最初空间-------------------*/
v