文档介绍:《数据结构与算法》实验报告
需求分析
问题描述:编制一个能演示执行集合的并、交和差运算的程序
基本要求:集合元素限定为小写字母[’a’…’z'];演示程序以用户和计算机对话方式执行。集合的输入形式为一个以“回车符"为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。计算机终端中显示提示信息之后,由用户自行选择下一步命令,相应输入数据和运算结果在其后显示。
数据测试:
(1) Set1=”magazine”, Set2=’paper”,
Set1∪Set2="aegimnprz”,Set1∩Set2=”ae",Set1—Set2=”gimnz”;
(2) Set1="012oper4a6tion89”,Set2=”error data”,
Set1∪Set2=”adeinoprt",Set1∩Set2=”aeort”, Set1—Set2=”inp”。
概要设计
运用顺序表
1.定义顺序表
typedef struct SET{
ﻩ char *elem;
int size;
int length;
}set;
2 基本操作:
set InitSet(set s);
//初始化集合
set Input(set s);
//向集合中输入元素
set InsertSet(set s, char e);
//向集合中插入元素
set DelateSet(set s,int n);
//从集合中删除元素
void display(set s);
//显示集合
set SetMix(set set1,set set2,set set3);
//求集合的交集
set check(set s);
//检查集合中是否有数字或者重复字母
set Sort(set s);
//对集合中的元素进行排序
详细设计
头文件
#include<stdio。h〉
#include<stdlib。h>
#include<>
定义
#define MAX_SIZE 20(顺序表的初始大小)
#define ADD_SIZE 10(顺序表的递增大小)
结构类型
typedef struct SET{
char *elem;
ﻩint size;
int length;
}set;
4. 初始化集合
set InitSet(set s){
=(char*)malloc(MAX_SIZE*sizeof(char));
s。size=MAX_SIZE;
=0;
return s;
}
5. 向集合中输入元素
set Input(set s){
char *newbase;
gets();
s。length+=strlen(s。elem);
ﻩif(s。size〈=){
newbase=(char*)realloc(,(s。size+ADD_SIZE)*sizeof(char));
=newbase;
s。size+=ADD_SIZE;
ﻩ}
return s;
}
set InsertSet(set s,char e){
s。elem[]=e;
[s。length+1]=’\0';
++;
ﻩreturn s;
}
7。从集合中删除元素
set DelateSet(set s,int n){
ﻩint i;
ﻩfor(i=n;i〈=s。length;i++){
[i—1]=s.elem[i];
}
ﻩs。length-—;
ﻩreturn s;
}
8.显示集合
void display(set s){
ﻩputs(s。elem);
}
9.检查集合中是否有数字或者重复字母
set check(set s){
int i,j,count;
for(i=1;i<=s。length;i++){
ﻩfor(j=1;j<i;j++){
ﻩﻩif([i-1]==s。elem[j-1]){
ﻩﻩﻩ s=DelateSet(s,i);
ﻩ i-—;
break;
}
}
}
for(i=1;i<=s。length;i++){