好久没来写博客了,最近开学社团的事情比较忙,然后之后的博客可能写数据结构和算法方面的比较多。
————————————————假装自己是分割线——————————————————
这里是将有序(从小到大)顺序表A,B 合并为一个有序(由小到大)顺序表C
#define MAXSIZE 100
#include<stdio.h>
// 定义数据结构,size为顺序表实际元素个数
typedef struct {
int m[MAXSIZE];
int size;
}list;
//创建
void creat(list *s)
{
int n, len;
printf("输入顺序表的长度:");
scanf("%d", &len);
s->size = len;
printf("输入顺序表的元素:");
for (int i = 0; i < len; i++)
{
scanf("%d", &n);
s->m[i] = n;
}
}
//输出
void print(list *s)
{
for (int i = 0; i < s->size; i++)
printf("%d ", s->m[i]);
printf("\n");
}
//合并
void combine(list *a, list *b, list *c)
{
int i=0, j=0, k=0;
//同时扫描两个表
while(i<a->size && j<b->size)
{
if(a->m[i]<=b->m[j])
{
c->m[k] = a->m[i];
i++;
k++;
}
else
{
c->m[k] = b->m[j];
j++;
k++;
}
}
//A表扫完,B组未扫完
if(i==a->size)
{
for(; j<b->size; j++)
{
c->m[k] = b->m[j];
k++;
}
}
if(j==b->size)
{
for(; i<a->size; i++)
{
c->m[k] = a->m[i];
k++;
}
}
c->size=k;
}
int main()
{
list a;
list b;
list c;
creat(&a);
creat(&b);
print(&a);
print(&b);
combine(&a,&b,&c);
print(&c);
}