1、基于sequlist.h中定义的顺序表,编写算法函数reverse(sequence_list *L),实现顺序表的就地倒置。
2、编写一个算法函数void sprit( sequence_list *L1,sequence_list *L2,sequence_list *L3),
将顺序表L1中的数据进行分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中,编写main()进行测试。
3、已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。
4、假设顺序表la与lb分别存放两个整数集合,函数inter(seqlist *la,seqlist *lb,seqlist *lc)
的功能是实现求顺序表la与lb的交集存放到顺序表lc中,请将函数补充完整.
5、请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,
所有偶数调整到表的右边,并分析算法的时间复杂度。
顺序表结构与相关函数
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int size;
}sequence_list;
void initseqlist(sequence_list *L)
{
L->size = 0;
}
void input(sequence_list *L)
{
datatype x;
initseqlist(L);
printf("输入一组数据,以0为结束符\n");
scanf_s("%d", &x);
while (x)
{
L->a[L->size++] = x;
scanf_s("%d", &x);
}
}
void inputfromfile(sequence_list *L, char *f)
{
int i, x;
FILE *fp = fopen(f, "r");
L->size = 0;
if (fp)
{
while (!feof(fp))
{
fscanf_s(fp, "%d", &L->a[L->size++]);
}
fclose(fp);
}
}
void print(sequence_list *L)
{
int i;
for (i = 0; i < L->size; i++)
{
printf("%5d", L->a[i]);
if ((i + 1) % 10 == 0)
printf("\n");
}
printf("\n");
}
一,
void reverse(sequence_list *L)
{
int temp;
for (int i = 0; i < L->size / 2; i++)
{
temp = L->a[i];
L->a[i] = L->a[L->size - 1 - i];
L->a[L->size - 1 - i] = temp;
}
}
int main()
{
sequence_list L; /*定义顺序表*/
input(&L); /*输入测试用例*/
print(&L); /*输出原表*/
reverse(&L); /*顺序表倒置*/
print(&L); /*输出新表*/
}
二,
三,
四,
五,
void partion(sequence_list *L)
{
int i = 0, j = L->size - 1;
while (i < j)
{
while (L->a[i] % 2 && i < j) i++;
while
{
if (L->a[i] % 2 == 0 && L->a[j] % 2) { // 找到左边的偶数,右边的奇数,那么就进行交换;
int temp = L->a[j];
L->a[j] = L->a[i];
L->a[i] = temp;
}
}
}
int main()
{
sequence_list L;
inputfromfile(&L, "3.txt");
print(&L); /*输出表L*/
partion(&L);
print(&L); /*输出新表*/
return 0;
}