数据结构c语言版课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构(c语言版)》课程设计报告
链式串的实现
学院:信息科学技术学院
班级:信息工程2009级 1 班
学号:************
*名:***
指导教师:***
完成日期:2010年12月
目录
一、需求分析………………………………………………P1
二、概要分析………………………………………………P3
三、详细设计………………………………………………P5
四、调试分析………………………………………………P14
五、用户手册………………………………………………P15
六、测试结果………………………………………………P15
七、附录……………………………………………………P17
一、需求分析
(1)输入的形式和输入值的范围
先输入一个int型数来选择操作,输入值的范围为1-8
再跟据所选的操作根据提示输入,若要输入一个字符串,则要输入一组char 型字符,其他的输int型数,字符串的长度为1-100
(2)输出的形式:字符串型
(3)程序所要表达的功能
用链表作为字符串的存储结构,实现字符串的新建,插入,删除,KMP算法,复制,2个字串的拼接,字符串的比较,求字符串的长度等操作。
(4)测试数据
如下截图:
二、概要设计
1、类型定义
typedef struct LiNode//类型定义一个链表节点{
char data; //数据域
struct LiNode * next; //指针域指向下个结点}LinkString;
2、各个功能函数
void Interface(); //界面函数
void Print(); //输出函数
void ShowStr(LinkString *s); //展示函数
int LengthStr(LinkString * s); //求字符串长度函数
void CopyStr(LinkString *&s,LinkString *t);//复制函数
void StrCreate(LinkString *&s); //创建字符串函数
int CompStr(LinkString * s,LinkString * t);//比较函数
LinkString *InsStr(LinkString * s,int i,LinkString * t);//插入函数
LinkString *DelStr(LinkString * s,int i,int j);//删除函数
LinkString *ConcatStr(LinkString *s,LinkString *t);//拼接函数
/**************KMP算法实现模式匹配*******************/
void GetNextval(LinkString*s,int nextval[]);
int Index_KMP(LinkString*s,LinkString*t);
3、程序模块层次调用
三、详细设计
1、首先对程序所要用到的数据类型进行定义:
宏定义:#define Maxsize 100
类型定义:
typedef struct LiNode
{
char data; //数据域
struct LiNode * next; //指针域指向下个结点
}LinkString;
2、各个功能函数的具体算法
1 StrCreate(创建字符串)
void StrCreate(LinkString *&s)
{
int i,k;
LinkString *r,*p;
printf("Please input the length of the string that you wanna create:\n");
printf("length=");
scanf("%d\n",&k);//给创建的字符串一个长度
s=(LinkString *)malloc(sizeof(LinkString));
r=s;
char t;
for(i=0;i { scanf("%c",&t);//一个个字符输入 p=(LinkString * )malloc(sizeof(LinkString)); p->data=t;//将字符储存到结点P中 p->next=NULL; r->next=p;//将p赋给指针r所指变量的next域 r=p; } } 2 InsStr(字符串的插入) LinkString *InsStr(LinkString * s,int i,LinkString * t) { int k; LinkString * str, * p=s->next, * p1=t->next, *q, *r; str=(LinkString * )malloc(sizeof(LinkString)); str->next=NULL; r = str; if(i<=0||i>LengthStr(s)+1) //参数不正确时返回空串 //(当插入的位置是不大于零or位置比串的长度还大一个) { printf("Parameter is not correct!\n"); return str; } for(k=1;k { q=(LinkString * )malloc(sizeof(LinkString)); q->data=p->data; q->next=NULL; r->next=q; r=q; p=p->next; } while(p1!=NULL) //将t的所有结点复制到str {