数据结构课程设计文章编辑器论文.docx
《数据结构课程设计文章编辑器论文.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计文章编辑器论文.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构课程设计文章编辑器论文
数据结构课程设计文章编辑器-论文
1.
信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的
各个领域。
计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工
劳动。
为了适应现代社会人们高度强烈的时间观念,文章编辑软件给了人们很大的方便。
数
据结构主要分析待处理的对象的特性以及各处理对象之间存在的关系。
建立数学模型的线性
数据结构,来解决线性表的线性关系。
它包括网络、集合代数论、格、关系等方面。
这次课程设计的任务是简单的做一个文章编辑程序,一共分为5个模块,能统计出文字、
数字、字符串空格的个数,能删除某一个字符。
根据这些功能,程序需要分别调用函数stdio、stdlib、malloc、string和conio,给出了一些简单的定义,如black、letter、word、number、string等的定义。
程序主要运用了模块化思想,运用顺序串和线性表来解决问题。
而这些问
题都可以用数据结构的知识来实现,这是个可性行的设计方案。
2.
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输
出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出统计的文章里面"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章。
3.
3.1程序详细设计
根据程序所具有功能可以分成以下十个功能模块:
3.1.1voidinitstring()初始化函数:
初始化、创建一个空串;
3.1.2voidassign()赋值函数:
对所创建串进行赋值;
3.1.3voidC_letter()字母统计函数:
对所输入的文章进行字母统计,并按一定的格式输出文章中的字母个数:
字母的数目可根据字符的ASC?
值来确定,从文章的第一个字符开始,判断其ASC?
值是否在英文字母所处的ASC?
值之中,如果是,此时的letter累加1;
否则,letter值不变.接着比较下一个字符,直到遇到Enter或i大于字符串的长度,最后输出
统计结果。
3.1.4voidC_blank()空格统计函数:
对所输入的文章进行空格统计,并按一定的格式输出文章中的空格个数:
空格的数目可直接从文章的第一个字符开始,逐个比较字符的ASC?
值是否与空格的ASC?
相等;相等,则:
blank(空格数)累加1;负责blank的值不变。
接着比较下一个字符,直到遇到Enter或i大于字符串的长度,最后输出统计结果。
3.1.5voidC_word()字数统计函数:
对所输入的文章进行字数统计,并按一定的格式输出
文章中的总字数:
单词的数目可以由非字母字符出现的次数决定。
如果测出某一字符为字母,而它前面的字符为非字母,则表示“新的单词开始了”,此时使单词数累加。
如果当前字符为字
母而其前面的字符也是字母,则意味着仍然是原来那个单词的继续,单词不应再累加1。
前面一个字符是否非字母可以从fag的值可以看出来,若fag=0,则表示前一字符是非字母;如果
fag=1,意味着前一个字符为字母。
3.1.6voidC_number()数字统计函数:
对所输入的文章进行字数统计,并按一定的格式输
出文章中的数字个数:
数字的数目可根据字符的ASC?
值来确定,从文章的第一个字符开始,判断其ASC?
值是否在数字(1--9)所处的ASC?
值之中,如果是:
此时的num(数字数)累加1;否则:
num值不变.接着比较下一个字符,直到遇到Enter或i大于字符串的长度,最后
输出统计结果。
3.1.7voidC_string()字符串统计函数:
程序运行后,从输入端输入任意一字符串,将会统
计该字符串在文章中出现的次数,并按一定的格式输出该字符串在文章中出现的次数:
利用输入函数,输入任意一字符串string,并将其长度赋给si,在主串S中从i(i的初始值为0)个字符起,长度和串string相等的子串,比较的过程中用j(j的初始值为0)指向字符串string的第j号字符,一次比较结束后,如果j>=si,则表示在主串S中找到一个与串string相等的子串,此时使strnum(字符串个数,其初始值为0)加1,j=0;直到条件i小于等于主串长度s->len不成立。
3.1.8voidDel_str()字符串删除函数:
程序运行后,从输入端输入任意一字符串,将会在
文章中删除所有该字符串,并将其后的文章内容前移,最后输出删除该字符串后的文章内容。
在main()函数外用typedef定义一结构体的类型st,并定义全局结构体类型变量ss,然后将该程序分成十个模块,首先用main()函数在各自模块中进行调用初始化函数,创建一
空串,接着调用赋值函数对其赋值;赋值完毕后,按Enter键输出“人性化”的界面,然后调用选择功能函数,根据“人性化”的提示输入指令代码,执行相应的操作。
各模块自定义一函数,自定义的子函数包括:
初始化函数、赋值。
用的函数有字母统计函
数、空格统计函数、字数统计函数、数字统计函数、标点符号统计函数、字符串统计函数、
字符串删除函数以及功能选择函数等。
模块之间的调用关系图如下:
免费,102
数据结构课程设计文章编辑器
4.#definetrue1
#definefalse0
#include
#include
#include
#include
#include
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefstruct
{
char*base;
char*top;
intstacksize;}
SqStack;
SqStackS,q;
typedefstruct{
charcc[99];
intno;
}
Array;
Arraya[100];
intm,n,i,j;
charname[40];
chart='\n';
FILE*fp;
/*constructanemputyshed*/
voidInitStack()
{
S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
if(S.base==NULL)
exit
(1);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;}
voidpush(chare)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
/*Attemptstoshrinkorexpandthepreviouslyallocatedblocktosizebytes.
Returnstheaddressofthereallocatedblockwhichcanbedifferentthanthe
originaladdress.Iftheblockcannotbereallocatedaddress.Iftheblock
cannotbe
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
}
charpop()
{
chare;
if(S.top==S.base)
returnfalse;
e=*(--S.top);
returne;
}
voidClearStack()
{
S.top=S.base;
}
voidDestroyStack()
{
free(S.base);
S.top=S.base;
}
intStackEmpty()
{
if(S.top==S.base)
returntrue;
returnfalse;
}
voidBuffer()
{
n=0;
m=1;
while(S.top!
=S.base)
{
n=n+1;
a[m].no=a[m].no+1;
a[m].cc[n]=*(S.top-1);
S.top--;
}
}
voidsave()
{
printf("\n\nfilename:
");
scanf("%s",&name);
fp=fopen(name,"wb");
for(i=1;i<=m;i++)
{
voidmain()
{需要完整内容的请联系,本文免费,
charch,e;
printf("\n\n\n\t\t\twelcometousethewholescreeneditor");
printf("\n\npressF6ifyouwanttosavethefile,youcansavethefilewhenyousee\"^Z\"\n");
printf("\n***********************************************************\n\n");
InitStack();
ch=getchar();
while(ch!
=EOF)
{
while(ch!
=EOF&&ch!
='\n')
{
switch(ch)
{
case'#':
e=pop();break;
case'@':
ClearStack();break;
default:
push(ch);break;
}
ch=getchar();
数据结构课程设计文章编辑器
}
Buffer();
ClearStack();
if(ch!
=EOF)
ch=getchar();
}
save();
DestroyStack();
}
main()
{
charc;
stss;
clrscr();
printf("\n\n\t\t\tPleaseinputyourpassage!
!
!
\n");
printf("***********************************************\n");
initstring(&ss);
assign(&ss);
printf("\n***************************************\n");
print();
print();
printf("\n\tWELCOMTOUSETHEWHOLESCREENEDITOR");
printf("\n\tCOUNTBLANKS");
printf("\n\tCOUNTLETTER");
printf("\n\tCOUNTWORD");
printf("\n\tCOUNTNUMBER");
printf("\n\tCOUNTSTRING");
printf("\n\tDELETEONESTR");
print();
print();
C_blank(&ss);
C_letter(&ss);
C_word(&ss);
C_number(&ss);
C_string(&ss);
Del_str(&ss);
}
5.
5.1开始步骤:
5.1.1使用编辑软件TE.EXE进行源程序的编写.
5.1.2使用汇编软件MASM.EXE对源程序汇编.
5.1.3使用连接软件LINK.EXE对目标文件进行连接.生成.EXE文件执行出现如图
5-1
5.2任意输入一段文章按回车键后,屏幕出现程序的运行结果,程序自动统计空格、字母、
字符、数字和字符串的个数,进入另一画面,然后出现查找某一个字符在文章里出现的个数,
如图5-2:
5-2
5.3输入某个字母如w,再按回车键,程序自动查询w在文章里面出现的个数,结果如图5-3:
数据结构课程设计文章编辑器
5-3
5.4最后是删除某个字符的功能,随便输入一个文章里面的某个字母,如w,然后按回车
键,程序自动将文章里面出现的所有的w删除,画面出现删除w的文章结果如图5-4:
5-4
5.5在编译结束运行完程序后,在同目录下生成了三个文件,文本文件里有文章的代码,其
中包括生成的MPR1.c文本文档、MPR1.Obj和MPR1.Exe可执行文件,按照格式输入一段字母、空格和数字,然后按回车,程序出现“人性化”界面,包括已经完成的统计功能,下面是选择项目,输入正确的操作指令,程序正常执行其他相应的功能;否则跳出程序,程序验
证正确.
5.6程序包括的字母统计函数、空格统计函数、字数统计函数、数字统计函数、标点符号统
计函数、字符串统计函数,它们的时间复杂度都是O(n);而字符串删除函数虽然不采用递归手法,采用重新建立一颗不含要删结点的二插排序树,但是它的时间复杂度也是O(n).
6.
这次课程设计作业使我对用高级语言编程产生了极大兴趣.通过这次课程设计也着实让自
己感受到了一次编程的乐趣,从中也学到了不少知识.虽然都说“程序=数据结构+算法”,但我在学习运用数据结构编程之前,并没能深刻体会到这一点,直到这次课设实践.
总的来说自己感受最深的一点是:
以前用C编程,只是注重如何编写函数能够完成所需
要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序.感觉有点像张飞打仗,有勇无谋,只要能完成任务就行.但现在编程感觉完全不同了.在编写一个程序之前,自己能够综合考虑各种因素,首先选取自己所需要的数据结构,是树还是图或是
别的什么?
然后选定一种或几种存储结构来具体的决定后面的函数的主要风格.最后在编写每一个函数之前,仔细斟酌比对,挑选出最适合当前状况的算法.这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了.这样无形中就提高了自己编写的程序
的质量和速度.另外,还体会到深刻理解数据结构的重要性.只有真正的理解这样定义数据类
型的好处,才能用好这样一种数据结构.了解典型数据结构的性质也是非常有用的,它往往
是编写程序的关键.以前对递归算法一直很害怕,总是看不明白究竟这递归是怎么样一步步
进行的.在这次课程设计中终于克服了这一障碍,一次次单步执行书中的递归函数的例子,
并一遍遍在心中自己默默的走,终于弄明白了,同时还根据自己的理解写出了类似的递归函
数实现了新的功能,受益良多!
在这次课程设计中,对参数的调用也进行了很多种尝试,已经能够相对准确的选择合适的
参数形式来实现函数之间的数据传输交互了.但在这次课程设计中也出现一些比较严重的错
误.在用一维数组顺序表结构编写程序时错误的运用静态链表来实现函数功能.这是对基本概念理解的模糊不清造成的.原以为只要采用一维数组作为存储结构它就一定也是顺序表结构,
而实质上这根本是两个不相干的概念.后来在老师和同学的指点帮助下意识到并改正了自己
的错误.不过收获也很不少的,至少又练习了运用静态链表来实现同样的功能,同时也发现
两者在很多函数上是互通的,只需稍作修改即可移植.总之,会继续有兴趣的编写程序,相
信在越来越多的尝试之后,自己会不断的进步不断提高的.
7.
[1]《数据结构》,严蔚敏等,清华大学出版社
[2]《数据结构题集》,严蔚敏等,清华大学出版社
[3]《程序设计与问题求解》,朱国进等,东华大学出版社