详情看代码,都有注释
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#define LIST_INT_SIZE 100 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10 // 线性表存储空间的初分配增量
#define OVERFLOW -1
#define OK 1
typedef char ElemType;
typedef int Status;
typedef struct {
ElemType *elem; // 存储空间基址
int length; // 当前长度
int listsize; // 当前分配的存储容量
}SqList;
//初始化线性表
Status InitList_Sq(SqList *L) {
L -> elem = (ElemType *) malloc (LIST_INT_SIZE * sizeof(ElemType));
if (!L -> elem) exit(OVERFLOW); // 存储分配失败
L -> length = 0; // 空表长度为0
L -> listsize = LIST_INT_SIZE; // 初始存储容量
return OK;
}
//创建集合并赋值
void Create_Sq(SqList *L) {
printf("\n创建集合\n");
int len = 0; // 记录有效元素个数
printf("\n输入集合元素(以回车结束)\n");
char ch;
int vis[27];
memset(vis, 0, sizeof(vis)); // 初始化数组
while (scanf("%c", &ch) && ch != '\n') { // 输入以回车符为结束标志的字符串
if(ch >= 'a' && ch <= 'z' && vis[ch - 'a'] == 0) { // 过滤非法字符和重复字符
// L -> elem[len++] = ch; // 集合赋值
vis[ch - 'a'] = 1; //标记出现过的字符
}
}
for (int i = 97; i < 123; i++) { // 枚举a-z的ASCII码值,实现对集合元素的从小到大排序
if (vis[char(i) - 'a'] == 1) {
L -> elem[len++] = char(i);
}
}
L -> length = len; // 设置顺序表的表长
printf("\n创建成功!\n");
}
//输出集合
void Print_Sq(SqList L) {
for (int