InitString(T[i]);
while(s)
{
printf("******************************************\n");
printf("请选择相关的操作:
\n");
printf("O.打开文件L.显示文件内容\n");
printf("I.插入相应的内容D.删除相应的某几行\n");
printf("W.将修改后的文本保存下来Q.退出编辑状态\n");
printf("******************************************\n");
k=getchar();
switch(k)
{
case'O':
Open();break;
case'L':
List();break;
case'I':
Insert();break;
case'D':
Delete();break;
case'W':
Save();
case'Q':
s=FALSE;
}
}
}/***************文本编辑器的程序**********************/
测试数据:
测试文档XLQ测试前:
打开文件:
显示文件内容:
插入相应内容:
删除某几行:
保存文本:
退出编辑状态:
测试后文本:
九、实验总结
在经过对串的学习后,我们需要进行实际上机实验,运行程序,达到理论联系实际的目的,使我们更好的掌握该算法。
这次实验要求我们熟悉串的基本操作,掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。
要求全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作,用户可完成对文本的插入、删除、修改等功能。
这次编的程序可以实现创建串、比较串、合并串和截取串的目的。
函数中共有StrAssign()(串的创建)、StrCompare()(串的比较)、Comcat()(串的合并)、SubString()(返回串的一部分)四个实现函数以及一个print()函数用来方便的输出整个串。
在主函数中对他们分别进行调用,使整个程序脉络比较清晰,可读性加强,但用的函数较少,整个程序相对比较复杂。
南昌大学实验报告
学生姓名:
吕金石学号:
6100408024专业班级:
数字媒体081班
实验类型:
□验证□综合■设计□创新实验日期:
2010.6.7实验成绩:
实验3:
二叉树及其应用
一、实验目的
树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。
二、问题描述
首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。
其次,以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。
如算术表达式:
a+b*(c-d)-e/f
三、实验要求
1、如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算
a)统计叶子结点的个数。
b)求二叉树的深度。
2、十进制的四则运算的计算器可以接收用户来自键盘的输入。
3、由输入的表达式字符串动态生成算术表达式所对应的二叉树。
4、自动完成求值运算和输出结果。
四、实验环境
PC微机
DOS操作系统或Windows操作系统
TurboC程序集成环境或VisualC++程序集成环境
五、实验步骤
1、根据二叉树的各种存储结构建立二叉树;
2、设计求叶子结点个数算法和树的深度算法;
3、根据表达式建立相应的二叉树,生成表达式树的模块;
4、根据表达式树,求出表达式值,生成求值模块;
5、程序运行效果,测试数据分析算法。
设计程序代码如下:
#include
#include
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineERROR0
#defineNUMBER1
#defineSIMBLE2
intOP[8]={'+','-','*','/','(',')','#',0};
typedefunion
{
intOperator;//操作符
floatOperand;//操作数
}Int_Float;
//表达式树
typedefstructBinaryTreeNode
{
Int_FloatData;
intIsOperator;
structBinaryTreeNode*RChild;
structBinaryTreeNode*LChild;
}BiTreeNode,*lpBiTreeNode;
//栈
typedefstruct{
lpBiTreeNode*base;
lpBiTreeNode*top;
intstacksize;
}SqStack;
intInitStack(SqStack&s)
{
s.base=(lpBiTreeNode*)malloc(STACK_INIT_SIZE*sizeof(lpBiTreeNode));
if(!
s.base)
return0;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return1;
}
intPush(SqStack&s,lpBiTreeNodee)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(lpBiTreeNode*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(lpBiTreeNode));
if(!
s.base)
return0;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top=e;
s.top++;
return1;
}
intPop(SqStack&s,lpBiTreeNode&e)
{
if(s.top==s.base)
return0;
s.top--;
e=*s.top;
return1;
}
lpBiTreeNodeGetTop(SqStacks)
{
lpBiTreeNodee;
if(s.top==s.base)
returnNULL;
e=*(s.top-1);
returne;
}
intIsEmpty(SqStacks)
{
if(s.top==s.base)
return1;
else
return0;
}
intIn(intc,int*op)//判断c是否在op中,op为以结尾的数组
{
while(*op!
=0)
{
if(c==*op)
return1;
op++;
}
return0;
}
intPrecede(inttheta1,inttheta2)
{
inti,j;
intop_look[7][7]=
{{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',''},
{'>','>','>','>','','>','>'},
{'<','<','<','<','<','','='}
};
switch(theta1)
{
case'+':
i=0;
break;
case'-':
i=1;
break;
case'*':
i=2;
break;
case'/':
i=3;
break;
case'(':
i=4;
break;
case')':
i=5;
break;
case'#':
i=6;
break;
default:
return0;
}
switch(theta2)
{
case'+':
j=0;
break;
case'-':
j=1;
break;
case'*':
j=2;
break;