#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
typedef int ElemType;
typedef int Status;
typedef int Status;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList *L)
//创建线性表
{
L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
{
L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
Status PrintList(SqList L)
//输出线性表
{
ElemType *p,*q;
p=L.elem;
q=L.elem+L.length-1;
if(L.length==0)
{
printf("线性表为空");
return ERROR;
}
for(;p<=q;p++)
{
printf("%-6d",*p);
}
printf("\n");
return OK;
}
{
ElemType *p,*q;
p=L.elem;
q=L.elem+L.length-1;
if(L.length==0)
{
printf("线性表为空");
return ERROR;
}
for(;p<=q;p++)
{
printf("%-6d",*p);
}
printf("\n");
return OK;
}
Status ListInsert(SqList *L,int i,ElemType e)
//数据插入
{
ElemType *newbase,*q,*p;
int j;
if(i<0||i>L->length+1)
{
printf("i值不合法\n");
return ERROR;
}
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L->elem=newbase;
L->listsize=L->listsize+LISTINCREMENT;
printf("expand successfully\n");
}
q=&L->elem[i-1];
for(p=&L->elem[L->length-1];p>=q;p--)
{
*(p+1)=*p;
}
*q=e;
L->length++;
return OK;
}
{
ElemType *newbase,*q,*p;
int j;
if(i<0||i>L->length+1)
{
printf("i值不合法\n");
return ERROR;
}
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L->elem=newbase;
L->listsize=L->listsize+LISTINCREMENT;
printf("expand successfully\n");
}
q=&L->elem[i-1];
for(p=&L->elem[L->length-1];p>=q;p--)
{
*(p+1)=*p;
}
*q=e;
L->length++;
return OK;
}
Status ListDelet(SqList *L,int i,ElemType *e)
//数据删除
{
ElemType *p,*q;
int j;
if(i<1||i>L->length)
return ERROR;
p=&L->elem[i-1];
q=&L->elem[L->length-1];
*e=*p;
for(;p<q;p++)
*(p)=*(p+1);
L->length--;
return OK;
}
{
ElemType *p,*q;
int j;
if(i<1||i>L->length)
return ERROR;
p=&L->elem[i-1];
q=&L->elem[L->length-1];
*e=*p;
for(;p<q;p++)
*(p)=*(p+1);
L->length--;
return OK;
}
Status GetElem(SqList L,int i,ElemType*e)
//获取第i位的元素
{
*e=L.elem[i-1];
return OK;
}
{
*e=L.elem[i-1];
return OK;
}
Status ListSort(SqList *L)//排序
{
int i,j,temp;
for(i=0;i<L->length-1;i++)
for(j=0;j<L->length-1-i;j++)
{
if(L->elem[j]>L->elem[j+1])
{
temp=L->elem[j];
L->elem[j]=L->elem[j+1];
L->elem[j+1]=temp;
}
}
}
{
int i,j,temp;
for(i=0;i<L->length-1;i++)
for(j=0;j<L->length-1-i;j++)
{
if(L->elem[j]>L->elem[j+1])
{
temp=L->elem[j];
L->elem[j]=L->elem[j+1];
L->elem[j+1]=temp;
}
}
}
Status MergeList(SqList La,SqList Lb,SqList *Lc)
//线性表合并
{
ElemType *pa,*pb,*pc,*qa,*qb;
pa=&La.elem[0];
pb=&Lb.elem[0];
Lc->listsize=Lc->length=La.length+Lb.length;
Lc->elem=(ElemType *)malloc(Lc->listsize*sizeof(ElemType));
pc=Lc->elem;
if(!Lc->elem)
exit(OVERFLOW);
qa=&La.elem[La.length-1];
qb=&Lb.elem[Lb.length-1];
while(pa<=qa&&pb<=qb)
{
if(*pa >= *pb)
*pc++ = *pb++;
else
*pc++ = *pa++;
}
while(pa<=qa)
*pc++ = *pa++;
while(pb<=qb)
*pc++ = *pb++;
return OK;
}
{
ElemType *pa,*pb,*pc,*qa,*qb;
pa=&La.elem[0];
pb=&Lb.elem[0];
Lc->listsize=Lc->length=La.length+Lb.length;
Lc->elem=(ElemType *)malloc(Lc->listsize*sizeof(ElemType));
pc=Lc->elem;
if(!Lc->elem)
exit(OVERFLOW);
qa=&La.elem[La.length-1];
qb=&Lb.elem[Lb.length-1];
while(pa<=qa&&pb<=qb)
{
if(*pa >= *pb)
*pc++ = *pb++;
else
*pc++ = *pa++;
}
while(pa<=qa)
*pc++ = *pa++;
while(pb<=qb)
*pc++ = *pb++;
return OK;
}
int main()
{
SqList L,L1,L2;
int i,n,j;
ElemType e;
InitList_Sq(&L);
InitList_Sq(&L1);
printf("创建线性表L\n");
printf("请输入10个数据\n");
for(i=1;i<=10;i++)
{
scanf("%d",&n);
if(ListInsert(&L,i,n)!=1)
{
printf("插入失败");
return ERROR;
}
}
printf("线性表L中的数据\n");
PrintList(L);
printf("请输入需要插入的位置\n");
scanf("%d",&j);
printf("请输入需要插入的数据\n");
scanf("%d",&e);
ListInsert(&L,j,e);
printf("当前线性表中的数据\n");
PrintList(L);
printf("请输入需要删除数据的位置\n");
scanf("%d",&j);
ListDelet(&L,j,&e);
printf("当前线性表中的数据\n");
PrintList(L);
printf("被删除的数据%d\n",e);
printf("请输入需要返回数据的位置\n");
scanf("%d",&j);
GetElem(L,j,&e);
printf("%d\n",e);
printf("创建线性表L1\n");
printf("请输入10个数据\n");
for(i=1;i<=10;i++)
{
scanf("%d",&n);
if(ListInsert(&L1,i,n)!=1)
{
printf("插入失败");
return ERROR;
}
}
printf("线性表L1中的数据\n");
PrintList(L1);
ListSort(&L);
ListSort(&L1);
printf("合并线性表L和L1为线性表L2\n");
MergeList(L,L1,&L2);
PrintList(L2);
printf("\n\t\t\t\t杨佳宁制作");
return 0;
}