文学研究助手数据结构课程设计Word文件下载.docx
- 文档编号:22269739
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:31
- 大小:119.03KB
文学研究助手数据结构课程设计Word文件下载.docx
《文学研究助手数据结构课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《文学研究助手数据结构课程设计Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
若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;
/*------------------------------回到最初空间-------------------*/
voidNewLength(OrderListrs)
{
intm=0;
LinkTypep,q;
p=rs.head->
next;
while(p)
if(m<
=p->
data.stadr){m=p->
data.stadr;
q=p;
}
p=p->
sp.freep=m+q->
data.len;
/*复制单词信息函数*/
把一个单词信息复制到另一个变量中*/
WordType*nw--新单词描述信息指针*/
/*WordType*oldw--旧单词描述信息指针*/
无*/
/*----------------------------------------------------------------*/
voidCopyWord(WordType*nw,WordTypeoldw)
stadr=oldw.stadr;
len=oldw.len;
/*单词比较函数*/
比较堆中两单词的大小*/
WordTypewd1--第一个单词描述信息*/
/*WordTypewd2--第二个单词描述信息*/
-1--小于;
0--等于;
1--大于*/
intWordCmp(WordTypewd1,WordTypewd2)
intk,si,sj,m;
si=wd1.stadr;
sj=wd2.stadr;
=wd1.len&
&
=wd2.len;
k++)
m=fabs((float)(sp.stores[si+k]-sp.stores[sj+k]));
if(m!
=0&
m!
=32)break;
if(k==wd1.len||k==wd2.len)break;
if(wd1.len==wd2.len)
if(k==wd1.len)return0;
else
if(sp.stores[si+k]>
sp.stores[sj+k])return1;
elsereturn-1;
elseif(wd1.len<
wd2.len)
if(k==wd1.len)return-1;
elsereturn-1;
if(k==wd2.len)return1;
else
/*打印单词函数*/
打印堆中一个单词*/
WordTypewd--单词描述信息*/
voidPrintWord(WordTypewd)
inti;
for(i=0;
i<
wd.len;
i++)putchar(sp.stores[wd.stadr+i]);
/*-------------------与有序表相关的函数----------------------*/
/*-------------------------------------------------------------------*/
/*结点生成函数*/
生成一个单词在堆中存储信息的结点*/
LinkType*p--生成的新结点指针*/
/*ElemTypee--单词存储信息*/
TRUE--成功;
FALSE--失败*/
/*-----------------------------------------------------------------*/
statusMakeNode(LinkType*p,ElemTypee)
*p=(LinkType)malloc(sizeof(NodeType));
if(!
(*p))returnFALSE;
(*p)->
data.stadr=e.stadr;
data.len=e.len;
next=NULL;
returnTRUE;
/*------------------------------------------------------------------------*/
/*有序表初始化函数*/
申请头结点,初始化有序表*/
OrderList*L--有序表指针*/
TRUE--初始化成功;
FALSE--初始化失败*/
statusInitList(OrderList*L)
ElemTypewd;
wd.len=0;
if(MakeNode(&
(L->
head),wd))
L->
tail=L->
head;
L->
head->
size=0;
head=NULL;
returnFALSE;
/*撤销有序表函数*/
释放有序表所有结点,撤销有序表*/
voidDestroyList(OrderList*L)
p=L->
while(p){
q=p;
p=p->
free(q);
head=L->
tail=NULL;
/*有序表查找函数*/
确定给定单词e在有序表中的位置*/
OrderListL--有序表*/
/*ElemTypee--给定要查找的数据e*/
/*LinkType*q--有序表结点指针*/
/*查找成功,q指向具有e值的结点*/
/*查找失败,q指向小于e的结点*/
int型,1--查找成功;
0--查找失败*/
statusLocateElem(OrderListL,ElemTypee,LinkType*q)
LinkTypepre,p;
p=L.head->
if(WordCmp(p->
data,e)==0){*q=p;
returnTRUE;
data,e)==-1)*q=p;
/*有序表插入函数*/
在制定结点q后插入一个结点s*/
/*LinkTypeq--指定结点指针*/
/*LinkTypes--待查入结点指针*/
/*---------------------------------------------------------------*/
voidInsertAfter(OrderList*L,LinkTypeq,LinkTypes)
if(L->
head&
q&
s){
s->
next=q->
q->
next=s;
if(L->
tail==q)L->
tail=s;
size++;
/*表匹配函数*/
把Lb表中匹配La表成功的元素放入s表*/
OrderListLa--存放统计单词的有序表*/
/*OrderListLb--存放待匹配单词的有序表*/
/*EqelemList*s--存放匹配成功单词信息表指针*/
/*-------------------------------------------------------------------------*/
voidListCompare(OrderListLa,OrderListLb,EqelemList*s)
intpos,n;
LinkTypepa,pb;
if(La.head&
Lb.head){
pa=La.head->
pb=Lb.head->
s->
last=pos=0;
while(pa&
pb){
n=WordCmp(pa->
data,pb->
data);
if(n==0){
s->
eqelem[s->
last++]=pos++;
pa=pa->
pb=pb->
}
elseif(n==-1){
pa=pa->
pos++;
elsepb=pb->
}
/*--------------------------------------------------------*/
/*判表空函数*/
判断表L是否是空表*/
0--非空表;
1--空表*/
statusListEmpty(OrderList*L)
size==0)returnTRUE;
intListLength(OrderList*L){/*返回判表长度*/
head==L->
tail)return0;
elsereturnL->
size;
/*-----------与文本文件有关的函数-----------------------*/
/*字符判断函数*/
判断文件中下一个字符是否为回车符*/
FILE*f--文件指针*/
0--不是回车符;
1--是回车符*/
intfeoln(FILE*f)
charcha;
cha=fgetc(f);
if(cha=='
\n'
)return(TRUE);
ungetc(cha,f);
retu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文学 研究 助手 数据结构 课程设计