“”串“”数据结构导论自考

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
typedef int status;
typedef struct{
char *ch;
int length;
}HString;
status InitString(HString &S)//开辟新串
{
S.ch=NULL; S.length=0;
return 0;
}
status StrAssign(HString &T,char *chars)//生成等值的串
}
五实验数据和结果分析
六总结
该程序能够很好的实现实验要求,并且操作方式简单易懂。启动程序,根据要求输入两串字符串,程序自动执行操作,输出结果。
不足之处是操作不灵活,不能自行选择各种操作,造成时间和存储空间的浪费。
Sub.length=len;
}
return OK;
}
void main()//主函数
{
int i=0; HString S1,S2,S3,S4,S5;
char string1[20],string2[20];
printf("************串的表示与实现*************\n");
{
int i;
if(T.ch) free(T.ch);
if(!(T.ch=(char *)malloc((S1.length+S2.length)*sizeof(char))))
exit(OVERFLOW);
for(i=0;i<S1.length;++i)
T.ch[i]=S1.ch[i];
T.length=S1.length+S2.length;
三程序的逻辑框图
四程序源代码
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
# define TRUE 1
# define FALSE 0
# define OK 1
# define ERROR 0
# define INFEASIBLE -1
# define OVERFLOW -2
return S.length-T.length;
}
status ClearString(HString &S)//清空串
{
if(S.ch)
{
free(S.ch); S.ch=NULL;
}
S.length=0;
return OK;
}
status Concat(HString &T,HString S1,HString S2) //合并两个非空串
else if (StrCompare(S1,S2)==0) printf ("第一串等于第二串\n");
else printf ("第一串大于第二串\n");
ClearString(S1); ClearString(S2); ClearString(S3); ClearString(S4); ClearString(S5);
for(i=0;i<S2.length;++i)
T.ch[i+S1.length]=S2.ch[i];
return OK;
}
status SubString(HString &Sub,HString S,int pos,int len) //返回串中的某个字符起一定长度的子串
{
if(pos<1||pos>S.length||len<0||len>S.length-pos+1)
一试验目的和要求
1、wenku.baidu.com验目的
了解和掌握串的逻辑结构,掌握串的基本算法及相关的应用。
2、实验要求
设计一个程序,要求应用串这种结构类型。做一个程序,要求功能有:输入输出两串字符、取出字符中的某些字节、合并字符、计算字符串长度、比较两个字符串。
二实验环境
本程序可以在98/2000/XP下运行,可以用VC++6.0执行
printf("第一串从第3位起的6个字符为: "); DispStr(S3); printf("\n");
printf("第二串从第2位起的7个字符为: "); DispStr(S4); printf("\n");
printf("合并后的字符串为: "); DispStr(S5); printf("\n");
StrAssign(S1,string1);StrAssign(S2,string2);
SubString(S3,S1,3,6); SubString(S4,S2,2,7);
Concat(S5,S3,S4);
printf("第一串是: "); DispStr(S1); printf("\n");
printf("第二串是: "); DispStr(S2); printf("\n");
return ERROR;
if(Sub.ch) free(Sub.ch);
if(!len)
{
Sub.ch=NULL; Sub.length=0;
}
else
{
Sub.ch=(char *)malloc(len*sizeof(char));
for(int i=0;i<len;++i)
Sub.ch[i]=S.ch[pos+i-1];
return 0;
for(i=0;i<S.length;i++)
printf("%c",S.ch[i]);
return OK;
}
int StrCompare(HString S,HString T)//比较两个串
{
int i;
for(i=0;i<S.length&&i<T.length;++i)
if(S.ch[i]!=T.ch[i]) return S.ch[i]-T.ch[i];
{
int i,j;char *c;
if(T.ch)free(T.ch);
for(i=0,c=chars; *c; ++i,++c)
{
}
if(!i)
{
T.ch=NULL; T.length=0;
}
else
{
if(!(T.ch=(char *)malloc(i*sizeof(char))))
exit(OVERFLOW);
printf("上面5个字符串的长度分别为: %d %d %d %d %d.\n",StrLength(S1),StrLength(S2),StrLength(S3),StrLength(S4),StrLength(S5));
printf("比较两串长度:\n");
if(StrCompare(S1,S2)>0) printf("第一串小于第二串\n");
printf("请分别输入两个字符串\n");
printf("第一串:");
gets(string1);
printf("第二串:");
gets(string2);
InitString(S1); InitString(S2); InitString(S3); InitString(S4); InitString(S5);
for(j=0;j<i;j++)
T.ch[j]=chars[j];
T.length=i;
}
return OK;
}
int StrLength(HString S)//求串的长度
{
return S.length;
}
status DispStr(HString S)//输出串
{
int i;
if(S.length==0)
相关文档
最新文档