【SeqList a】取值为:a.data;
【SeqList *a】取值为: a->data;
1、顺序表逆置
/*将顺序表逆置*/
void convertList(SeqList *l) {
int i;
int length = (l->size) / 2;
printf("length:【%d】\n", length);
printf("l->size:【%d】\n", l->size);
DataType temp;//暂放中间值
for (i = 0; i < length; i++) {//相互交换
int len = l->size - 1 - i;
temp = l->list[len];
l->list[len] = l->list[i];
l->list[i] = temp;
}
}
2、求A、B的交集
SeqList intersection(SeqList a, SeqList b) {
//找出元素少的集合
int len;
SeqList min, max;
if (a.size > b.size) {
len = b.size;
min = b;
max = a;
} else {
len = a.size;
min = a;
max = b;
}
//用元素少的去比较元素多的,并将相同的元素存起来
SeqList p;
printf("len:【%d】\n", len);
printf("min:【%d】\n", min.list[0]);
printf("max:【%d】\n", max.list[0]);
int k = -1;
for (int i = 0; i < len; i++) {
for (int j = 0; j < max.size; j++) {
if (min.list[i] == max.list[j]) {
k++;
printf("K值:【%d】\n", k);
p.size = k + 1;
p.list[k] = min.list[i];
printf("交集元素:【%d】\n", p.list[k]);
printf("交集大小:【%d】\n", p.size);
}
}
}
printf("p.size:【%d】\n", p.size);
return p;
}
3、重写insert函数
int ReInsert(SeqList *L, int i, DataType x) {
int j = 0;
for ( j = L->size; j > i; j--) {
L->list[j] = L->list[j - 1]; //从后向前依次移动一个位置
}
L->list[i] = x; //将插入的x元素放在第i位置
L->size++;
return 1; //成功返回 1
}
测试代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef int DataType;
#define MaxSize 10
#include "SeqList.h" //导入包含顺序表操作的包
/*将顺序表逆置*/
void convertList(SeqList *l) {
int i;
int length = (l->size) / 2;
printf("length:【%d】\n", length);
printf("l->size:【%d】\n", l->size);
DataType temp;//暂放中间值
for (i = 0; i < length; i++) {//相互交换
int len = l->size - 1 - i;
temp = l->list[len];
l->list[len] = l->list[i];
l->list[i] = temp;
}
}
/*
重写insert函数
在表满时使表的长度增加1倍,
并将新元素插入顺序表。*/
int ReInsert(SeqList *L, int i, DataType x) {
int j = 0;
for ( j = L->size; j > i; j--) {
L->list[j] = L->list[j - 1]; //从后向前依次移动一个位置
}
L->list[i] = x; //将插入的x元素放在第i位置
L->size++;
return 1; //成功返回 1
}
/**
求A、B的交集
*/
SeqList intersection(SeqList a, SeqList b) {
//找出元素少的集合
int len;
SeqList min, max;
if (a.size > b.size) {
len = b.size;
min = b;
max = a;
} else {
len = a.size;
min = a;
max = b;
}
//用元素少的去比较元素多的,并将相同的元素存起来
SeqList p;
printf("len:【%d】\n", len);
printf("min:【%d】\n", min.list[0]);
printf("max:【%d】\n", max.list[0]);
int k = -1;
for (int i = 0; i < len; i++) {
for (int j = 0; j < max.size; j++) {
if (min.list[i] == max.list[j]) {
k++;
printf("K值:【%d】\n", k);
p.size = k + 1;
p.list[k] = min.list[i];
printf("交集元素:【%d】\n", p.list[k]);
printf("交集大小:【%d】\n", p.size);
}
}
}
printf("p.size:【%d】\n", p.size);
return p;
}
int main(void) {
SeqList l;
printf("初始化线性表...\n");
ListInitiate(&l);
ListPrint(&l);
printf("插入元素...\n");
for (int i = 0; i < MaxSize; i++) {
ListInsert(&l, i, (i + 3));
}
printf("遍历元素(转置前)...\n");
ListPrint(&l);
printf("遍历元素(转置后)...\n");
convertList(&l);
ListPrint(&l);
printf("\n");
getch();
printf("重写insert函数...\n");
printf("初始化线性表...\n");
ListInitiate(&l);
for (int i = 0; i < 10; i++) {
ReInsert(&l, i, (i + 10));
}
ListPrint(&l);
printf("\n");
getch();
printf("求两个顺序表的交集...\n");
SeqList a, b;
printf("初始化线性表【A】...\n");
ListInitiate(&a);
for (int i = 0; i < 5; i++) {
ReInsert(&a, i, (i + 0));
}
printf("集合【A】:");
ListPrint(&a);
printf("\n");
printf("初始化线性表【B】...\n");
ListInitiate(&b);
for (int i = 0; i < 5; i++) {
ListInsert(&b, i, (i + 3));
}
printf("集合【B】:");
ListPrint(&b);
printf("\n");
printf("开始求A B的交集【C】...\n");
SeqList c = intersection(a, b);
printf("遍历A B的交集【C】:\n");
ListPrint(&c);
printf("\n");
system("pause");
return 0;
}