#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©;
}