1.有序表是指元素值递增或递减排列的线性表;如果这个有序表是按顺序存储结构存储的,就是有序顺序表。其经典算法为有序顺序表的二路归并算法。
例1 已知有递增顺序表A和有递增顺序表B,将它们合并为一个递增顺序表C。
程序代码:
(1)SqList.cpp文件
#include<stdio.h>
#define MaxSize 100 //集合最大元素个数
typedef int ElemType; //定义元素类型
typedef struct //定义顺序表类型
{
ElemType data[MaxSize]; //数组存储集合元素
int length; //存储集合中元素的个数
}SqList;
void InitList(SqList &L)//初始化顺序表
{
L.length=0;
}
void Destroy(SqList L)//释放顺序表
{
}
int GetLength(SqList L)//返回顺序表的长度
{
return L.length;
}
//获取顺序表指定位置上的元素,成功返回1,否则返回0
int GetElem(SqList L,int i,ElemType &e)
{
if(i>=1&&i<=L.length)
{
e=L.data[i-1];
return 1;
}
else
return 0;
}
//返回元素在顺序各表中的位置,若不在顺序表中返回0
int Locate(SqList L,ElemType x)
{
int i=1;
while(i<=L.length && L.data[i-1]!=x)
i++;
if(i<=L.length)
return i;
else
return 0;
}
//在顺序表L的第i个元素处插入一个x,成功返回1,失败返回0
int InsElem(SqList &L,ElemType x,int i)
{
int j;
if(i<1||i>L.length+1)
return 0;
for(j=L.length;j>i-1;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=x;
L.length++;
return 1;
}
//删除顺序表L中位置i处理的元素,成功返回1,失败返回0
int DelElem(SqList &L,int i)
{
int j;
if(i<0||i>=L.length)
return 0;
for(j=i;j<L.length;j++)
L.data[j]=L.data[j+1];
L.length--;
return 1;
}
//输出顺序表L中的元素
void DispList(SqList L)
{
for(int i=1;i<=L.length;i++)
printf("%d ",L.data[i-1]);
printf("\n");
}
//整体创建顺序表
void createList(SqList &L,ElemType a[],int n)
{
for(int i=1;i<=n;i++)
InsElem(L,a[i-1],i);
}
(2)主函数文件
#include<stdio.h>
#include"SqList.cpp"
void Merger(SqList A,SqList B,SqList &C)
{
int i,j,k; //i,j,k为下标
i=j=k=0; //i遍历A,j遍历B,k遍历C
while(i<A.length&&j<B.length) //A和B都没有读完时
{
if(A.data[i]<B.data[j])
{
C.data[k]=A.data[i];
i++;
}
else
{
C.data[k]=B.data[j];
j++;
}
k++;
}
while(i<A.length) //A没有读完时
{
C.data[k]=A.data[i];
k++; i++;
}
while(j<B.length) //B没有读完时
{
C.data[k]=B.data[j];
k++; j++;
}
C.length=k;
}
int main()
{
int a[]={1,5,8,10};
int b[]={2,3,6,7};
SqList A,B,C;
InitList(A);
createList(A,a,4);
printf("有序顺序表A为:");
DispList(A);
InitList(B);
createList(B,b,4);
printf("有序顺序表B为:");
DispList(B);
InitList(C);
Merger(A,B,C);
printf("有序顺序表C为:");
DispList(C);
}
本文介绍了一种将两个递增有序顺序表合并成一个递增有序顺序表的方法,并提供了完整的C语言实现代码。通过定义顺序表类型及其实现的常用操作,如初始化、获取长度等,最终实现了合并算法。
744

被折叠的 条评论
为什么被折叠?



