
#include<stdlib.h>
#define MAXSIZE 110
typedef struct
{
int elem[MAXSIZE]
int len
}sqlist
void merge(sqlist *la,sqlist *lb,sqlist *lc)
{
int i,j,k
i=j=k=0
if(la->len+lb->len<=MAXSIZE)
{
while(i<la->len&&j<lb->len)
{
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->len)
{
lc->elem[k]=la->elem[i]
i++
k++
}
while(j<lb->len)
{
lc->elem[k]=lb->elem[j]
j++
k++
}
lc->len=la->len+lb->len
}
else printf("out of bound")
}
void print(sqlist *l)
{
int i
for(i=0i<l->leni++)
{
printf("%d ",l->elem[i])
}
printf("\n")
}
int main(void)
{
int i
sqlist la
sqlist lb
sqlist lc
printf("输入线性表LA的元素个数:")
scanf("%d",&la.len)
printf("输入线性表LA的%d个元素:",la.len)
for(i=0i<la.leni++)
scanf("%d",&la.elem[i])
printf("输入线性表LB的元素个数:")
scanf("%d",&lb.len)
printf("输入线性表LB的%d个元素:",lb.len)
for(i=0i<lb.leni++)
scanf("%d",&lb.elem[i])
merge(&la,&lb,&lc)
print(&lc)
system("pause")
return(0)
}
//希望我的回答对你的学习有帮助#include <stdlib.h>
/*顺序表存储空间长度的最小值*/
#define LISTMINSIZE 10
/*顺序表存储结构类型定义*/
typedef struct
{
ListDT*base /*顺序表空间基地址*/
intlistsize /*顺序表空间尺寸*/
intlen /*顺序表长度*/
}SeqList
/*顺序表初始化*/
void ListInitialize(SeqList *pL, int size)
{
if(size<LISTMINSIZE)
size=LISTMINSIZE /*限定不能小于最小尺寸*/
pL->listsize=size
pL->base=(ListDT*)malloc(pL->listsize*sizeof(ListDT))
if(!pL->base)
exit(EXIT_FAILURE)
pL->len=0 /*初始化空表*/
}
/*按给定的下标取顺序表元素值*/
BOOL ListElem(SeqList L, int index, ListDT *pelem)
{
BOOLflg=TRUE
if(index<0|| index>L.len-1 )
flg=FALSE /*参数越界*/
else
*pelem=L.base[index]
returnflg
}
/*求顺序表长度*/
int ListLen(SeqList L)
{
returnL.len
}
/*在顺序表中指定序号位置插入元素*/
BOOL ListInsert(SeqList *pL, int pos, ListDT d)
{
BOOLflg=TRUE
inti
if(pos<0|| pL->len>=pL->listsize || pos>pL->len)
flg=FALSE
else
{
for(i=pL->len-1i>=pos i--) /*移动数据*/
pL->base[i+1]=pL->base[i]
pL->base[pos]=d /*写入数据*/
pL->len++ /*表长增1*/
}
returnflg
}
/*把顺序表中指定序号的元素删除*/
BOOL ListDel(SeqList *pL, int pos)
{
BOOLflg=TRUE
inti
if(pos<0|| pos>=pL->len)
flg=FALSE
else
{
for(i=pos+1i<pL->len i++) /*移动数据*/
pL->base[i-1]=pL->base[i]
pL->len-- /*表长增1*/
}
returnflg
}
/*在顺序表中查找元素*/
int ListLoc(SeqList L, ListDT d,BOOL (*equal)(ListDT,ListDT))
{
intpos=L.len-1
while(pos>=0&& !(*equal)(L.base[pos],d))
pos--
returnpos
}
/*取前导元素序号位置*/
BOOL ListPrior(SeqList L, int pos, int *ppriorpos)
{
BOOLflg=TRUE
if(pos>0&& pos<L.len)
*ppriorpos=pos-1
else
flg=FALSE
returnflg
}
/*取后继元素序号位置*/
BOOL ListNext(SeqList L, int pos, int *pnextpos)
{
BOOLflg=TRUE
if(pos>=0&& pos<L.len-1)
*pnextpos=pos+1
else
flg=FALSE
returnflg
}
/*销毁顺序表*/
void ListDestroy(SeqList L)
{
free(L.base)
}
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
建议性测试用程序
*/
typedef enum {TRUE=1,FALSE=0} BOOL
typedef int ListDT
#include "seqlist.c"
void printSeqList(SeqList L)
{
inti
ListDTx
printf("\nList:\n")
for(i=0i<ListLen(L) i++)
{
ListElem(L,i,&x)
printf("%3d",x)
}
}
BOOL dataequal(int x, int y)
{
return(x==y)? TRUE:FALSE
}
#define N 5
void main()
{
inti,prior,next
ListDTx,test[N]={10,20,30,40,50}
SeqListL
/*初始化顺序表*/
ListInitialize(&L,N)
/*在表头插入N个元素*/
for(i=0i<N i++)
ListInsert(&L,0,test[i])
printSeqList(L)
/*删除元素*/
ListDel(&L,N/2)
printSeqList(L)
printf("\ninputa key:\n")
scanf("%d",&x)
/*查找x在表中位置*/
i=ListLoc(L,x,dataequal)
/*求x的前导元素*/
if(ListPrior(L,i,&prior))
{
ListElem(L,prior,&x)
printf("Prior:%d\n",x)
}
else
printf("noPrior.\n")
/*求x的后继*/
if(ListNext(L,i,&next))
{
ListElem(L,next,&x)
printf("Next:%d\n",x)
}
else
printf("noNext.\n")
/*求表长*/
printf("Listlength=%d",ListLen(L))
/*销毁顺序表*/
ListDestroy(L)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)