#define LOCAL
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define ElemType int
#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/
typedef struct
{
ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/
int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
}SeqList;
int Locate(SeqList L, ElemType e)
{
int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
while ((i<=L.last)&&(L.elem[i]!=e))/*顺序扫描表,直到找到值为e的元素, 或扫描到表尾而没找到*/
i++;
if (i<=L.last)
return(i+1); /*若找到值为e的元素,则返回其序号*/
else
return(-1); /*若没找到,则返回空序号*/
}
/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,
i的合法取值范围是 1≤i≤L->last+2 */
int InsList(SeqList *L,int i,ElemType e)
{
int k;
if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L->last>= MAXSIZE-1)
{
printf("表已满无法插入");
return(ERROR);
}
for(k=L->last;k>=i-1;k--) /*为插入元素而移动位置*/
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e; /*在C语言数组中,第i个元素的下标为i-1*/
L->last++;
return(OK);
}
int DelList(SeqList *L,int i,ElemType *e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */
{
int k;
if((i<1)||(i>L->last+1))
{
printf("删除位置不合法!");
return(ERROR);
}
*e = L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/
for(k=i; i<=L->last; k++)
L->elem[k-1] = L->elem[k]; /*将后面的元素依次前移*/
L->last--;
return(OK);
}
void merge(SeqList *LA, SeqList *LB, SeqList *LC)
{
int i,j,k;
i=0;j=0;k=0;
while(i<=LA->last&&j<=LB->last)
if(LA->elem[i]<=LB->elem[j])
{
LC->elem[k]= LA->elem[i];
i++;
k++;
}
else
{
LC->elem[k]=LB->elem[j];
j++;
k++;
}
while(i<=LA->last) /*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/
{
LC->elem[k]= LA->elem[i];
i++;
k++;
}
while(j<=LB->last) /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/
{
LC->elem[k]= LB->elem[j];
j++;
k++;
}
LC->last=LA->last+LB->last+1;
}
void Display(SeqList *Sq)
{
for(int i=0; i<=Sq->last; i++)
{
printf("%d ",Sq->elem[i]);
}
}
int main()
{
#ifdef LOCAL
freopen("2.in","r",stdin);
freopen("2.out","w",stdout);
#endif
SeqList LA,LB,LC;
int i,r;
printf("请输入线性表LA的长度:\n");
scanf("%d",&r);
LA.last = r-1;
printf("请输入线性表的各元素值:\n");
for(i=0; i<=LA.last; i++)
{
scanf("%d",&LA.elem[i]);
}
printf("请输入线性表LB的长度:\n");
scanf("%d",&r);
LB.last = r-1;
printf("请输入线性表的各元素值:\n");
for(i=0; i<=LB.last; i++)
{
scanf("%d",&LB.elem[i]);
}
merge(&LA,&LB,&LC);
Display(&LC);
/*
SeqList l;
int p,q,r;
int i;
printf("请输入线性表的长度:\n");
scanf("%d",&r);
l.last = r-1;
printf("请输入线性表的各元素值:\n");
for(i=0; i<=l.last; i++)
{
scanf("%d",&l.elem[i]);
}
printf("请输入要查找的元素值:\n");
scanf("%d",&q);
p=Locate(l,q);
if(p == -1)
printf("在此线性表中没有该元素!\n");
else
printf("该元素在线性表中的位置为:%d\n",p);
ElemType key;
int local;
printf("请输入要插入元素值key,和要插入的位置local.\n");
scanf("%d%d",&key,&local);
printf("插入元素值:");
if(InsList(&l,key,local)==OK)
{
printf("OK\n");
}else
{
printf("ERROR\n");
}
scanf("请输入要删除元素的位置:\n",&local);
printf("删除元素值:");
if(DelList(&l,local,&key)==OK)
{
printf("OK,key=%d\n",key);
}else
{
printf("ERROR\n");
}
*/
return 0;
}