合并顺序表

这篇博客介绍了如何使用C语言实现顺序表的创建、赋值、合并及逆置操作。首先通过`Chuangjian`函数创建顺序表,然后使用`Fuzhi`函数为顺序表赋值,接着调用`Hebing`函数合并两个顺序表,并用`Nizhi`函数逆置合并后的顺序表。最后,`Print`函数输出所有顺序表的内容。
摘要由CSDN通过智能技术生成

#include<stdio.h>
#include<stdlib.h>
#define ok 1
#define ERROR 0
#define OVERFLOW -1
#define INITSIZE 100//预定义容量大小
#define INCREMENT 10 //增加的容量
typedef int Status;
typedef int ElemType;
typedef struct{
ElemType *elem;
int Length;
int Listsize;
}SqList;

Status Chuangjian(SqList &L)
{
L.elem = (ElemType )malloc(INITSIZEsizeof(ElemType));
if(!L.elem)//失败
exit(-1);
L.Length = 0;
L.Listsize = INITSIZE;
return ok;

}
void Fuzhi(SqList &L)//为顺序表赋值
{
int n;//n为需要放入的元素个数
printf(“放入元素个数:”);
scanf("%d",&n);
for(int i = 0;i<n;i++)
{
scanf("%d",&L.elem[i]);
L.Length++;
}

}
void Print(SqList L)//输出顺序表
{
int n;
n = L.Length;//n为元素个数
for(int i = 0;i<n;i++)
{
printf("%d ",L.elem[i]);

}
printf("\n"); 

}

Status Hebing(SqList A,SqList B,SqList &C)//合并顺序表
{
ElemType *pa,*pb,*pc,*pasize,*pbsize;
C.elem = (ElemType *)malloc( (A.Length+B.Length)*sizeof(ElemType) );
C.Length = C.Listsize = A.Length+B.Length;
pc = C.elem;//pc指向C首元素地址
pa = A.elem;//pa指向A首元素地址
pb = B.elem;//pb指向B首元素地址
pasize = A.elem+A.Length;//pasize指向A尾元素地址
pbsize = B.elem+B.Length;//pbsize指向B尾元素地址
while(pa<pasize&&pb<pbsize)
{
if(*pa<=*pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while(pa<pasize)//A中剩余元素赋给C
*pc++ = *pa++;
while(pb<pbsize)//B中剩余元素赋给C
*pc++ = *pb++;
return ok;
}
Status Nizhi(SqList &L)//逆置顺序表
{
ElemType *p,*q;
int t;//t为传值中介
p = L.elem;//p指向顺序表头部
q = L.elem+L.Length-1;//q指向顺序表尾部
//每次p和q数据交换,然后p++ q–,结束条件为p<q
while(p<q)
{
t = *p;
*p = *q;
*q = t;
p++;q–;
}
return ok;
}
int main()
{
SqList A,B,C;
if(Chuangjian(A)&&Chuangjian(B))
printf(“A B顺序表创建成功!\n”);
printf(“为A赋值;\n”);
Fuzhi(A);
printf(“为B赋值:\n”);
Fuzhi(B);
Hebing(A,B,C);//合并A和B
Nizhi©;//逆置C
printf(“输出顺序表ABC:\n”);
Print(A);
Print(B);
Print©;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值