线性表
#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 10
#define OK 1
#define ERROR 0
typedef struct{
int elem[MAXSIZE];
int last;
}SeqList;
int Locate(SeqList L,int e)//线性表查找
{
int i=0;
while((i<=L.last)&&(L.elem[i]!=e)){
i++;
}
if(i<=L.last){
return(i+1);
}
else
{
return(-1);
}
}
int InsList(SeqList *L,int i,int 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;
L->last++;
return(OK);
}
int DelList(SeqList *L,int i)//,int *e)//删除线性表元素
{
int k;
if((i<1)||(i>L->last+1)){
printf("删除的位置不合法!");
return(ERROR);
}
//*e=L->elem[i-1];
for(k=i;k<=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,l;
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)
{
LC->elem[k]=LA->elem[i];
i++;k++;
}
while(j<=LB->last)
{
LC->elem[k]=LB->elem[i];
i++;k++;
}
LC->last=LA->last+LB->last+1;
}
int main(){
//初始化结构数组以及要寻找的字母
SeqList tr,tt,ts;
/* tr.last=MAXSIZE-1;
printf("输入查找表\n");
int i=0,e=0,C;
for(i=0;i<MAXSIZE;i++)
scanf("%d",&tr.elem[i]);
printf("输入要查找的数字:");
scanf("%d",&e);
C=Locate(tr,e);
printf("%d",C);
*/
/* int I,i,e;
tr.last=MAXSIZE-2;
printf("输入查找表\n");
for(i=0;i<MAXSIZE-1;i++)
scanf("%d",&tr.elem[i]);
printf("输入插入的数字以及插入的位置I:");
scanf("%d %d",&e,&I);
InsList(&tr,I,e);
printf("输出插入后的线性表\n");
for(i=0;i<MAXSIZE;i++)
printf("%d ",tr.elem[i]);
printf("\n");
int ad;
int *p=NULL;
printf("输入要删除的第i个元素:");
scanf("%d",&ad);
DelList(&tr,ad);//,&p);
for(i=0;i<MAXSIZE-1;i++)
printf("%d ",tr.elem[i]);
printf("\n");
//printf("删除的元素为:%d",*p);
*/
int i;
tr.last=MAXSIZE/2-1;
tt.last=MAXSIZE/2-1;
ts.last=MAXSIZE-1;
printf("输入线性表1:\n");
for(i=0;i<MAXSIZE/2;i++)
scanf("%d",&tr.elem[i]);
printf("输入线性表2:\n");
for(i=0;i<MAXSIZE/2;i++)
scanf("%d",&tt.elem[i]);
merge(&tr,&tt,&ts);
for(i=0;i<ts.last;i++)
{
printf("%d ",ts.elem[i]);
}
return 0;
}