实验一线性表的顺序存储结构
1.(必做题) 以顺序表表示集合,编制一个能演示执行集合的并、交、差、补运算的程序。
(1) 集合的元素限定为小写字母字符(‘a’…’z’),集合输入的形式为一个以“回车符”为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序应能自动滤去。输出的运算结果字符串中将不含重复字符和非法字符。
(2) 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据(滤去输入中的非法字符)和运算结果显示在其后。
(3) 程序执行的命令应包括:① 构造集合1;② 构造集合2;③ 求并集;④ 求补集;⑤ 退出。
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10 // 线性表存储空间的分配增量
typedef struct SqList{
int *elem; // 存储空间基址
int length; // 当前长度
int listsize; // 当前分配的存储容量
};
void InitList_Sq(SqList &L) 构造一个空的线性表
{
L.elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));
if(!L.elem) // 存储分配失败
exit(0);
L.length = 0; // 空表长度为0
L.listsize = LISTINCREMENT; // 初始存储容量
}
void input(SqList &La,SqList &Lb) //输入并去除非法字符
{
char c,s;
int i=0;
printf("输入集合a:");
while((c = getchar())!='\n')
{
La.elem[i++] = c;
La.length++;
}
i=0;
printf("输入集合b:");
while((s = getchar())!='\n')
{
Lb.elem[i++] = s;
Lb.length++;
}
int *p,*q;
for( i=0;i<La.length;i++)
{
while(La.elem[i]<'a'||La.elem[i]>&#