1. 首页>百科大全 > 百科

数据结构:顺序表的合并(C语言)

作者:丁熙
2019-10-10
百科

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

#defineLIST_INIT_SIZE10//线性表存储空间的初始分配量

#defineLISTINCREMENT2//线性表存储空间的分配增量

structSqList

{

int*elem;//存储空间基址

intlength;//当前长度

intlistsize;//当前分配的存储容量(以sizeof(int)为单位)

};

voidInitList(SqList&L)

{//操作结果:构造一个空的顺序线性表

L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));

if(!L.elem)

exit(0);//存储分配失败

L.length=0;//空表长度为0

L.listsize=LIST_INIT_SIZE;//初始存储容量

}

intListInsert(SqList&L,inti,inte)

{//初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1

//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1

int*newbase,*q,*p;

if(i<1||i>L.length+1)//i值不合法

return0;

if(L.length>=L.listsize)//当前存储空间已满,增加分配

{

if(!(newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int))))

exit(0);//存储分配失败

L.elem=newbase;//新基址

L.listsize+=LISTINCREMENT;//增加存储容量

}

q=L.elem+i-1;//q为插入位置

for(p=L.elem+L.length-1;p>=q;--p)//插入位置及之后的元素右移

*(p+1)=*p;

*q=e;//插入e

++L.length;//表长增1

return1;

}

voidPrint(SqList&L)

{

inti;

for(i=0;i<L.length;i++)

printf("%d",*(L.elem+i));

printf("n");

}

————————————————————————————————————

//函数①

voidMergeList1(SqListLa,SqListLb,SqList&Lc)

{

int*pa,*pa_last,*pb,*pb_last,*pc;

pa=La.elem;

pb=Lb.elem;

Lc.listsize=Lc.length=La.length+Lb.length;//不用InitList()创建空表Lc

pc=Lc.elem=(int*)malloc(Lc.listsize*sizeof(int));

if(!Lc.elem)//存储分配失败

exit(0);

pa_last=La.elem+La.length-1;

pb_last=Lb.elem+Lb.length-1;

while(pa<=pa_last&&pb<=pb_last)//表La和表Lb均非空

{//归并

if(*pa<*pb)

*pc++=*pa++;

elseif(*pa>*pb)

*pc++=*pb++;

else{

*pc++=*pa++;

pb++;

Lc.length--;

}

}

while(pa<=pa_last)//表La非空且表Lb空

*pc++=*pa++;//插入La的剩余元素

while(pb<=pb_last)//表Lb非空且表La空

*pc++=*pb++;//插入Lb的剩余元素

}

————————————————————————————————————

//函数②

voidMergeList2(SqListLa,SqList&Lb,SqList&Lc)

{

int*pa,*pa_last,*pb,*pb_last,*pc;

pa=La.elem;

pb=Lb.elem;

Lc.listsize=Lc.length=La.length+Lb.length;//不用InitList()创建空表Lc

pc=Lc.elem=(int*)malloc(Lc.listsize*sizeof(int));

if(!Lc.elem)//存储分配失败

exit(0);

pa_last=La.elem+La.length-1;

pb_last=Lb.elem+Lb.length-1;

while(pa<=pa_last&&pb<=pb_last)//表La和表Lb均非空

{//归并

if(*pa<=*pb)

*pc++=*pa++;

else

*pc++=*pb++;

}

while(pa<=pa_last)//表La非空且表Lb空

*pc++=*pa++;//插入La的剩余元素

while(pb<=pb_last)//表Lb非空且表La空

*pc++=*pb++;//插入Lb的剩余元素

Lb.length=Lc.length;

Lb=Lc;

}

————————————————————————————————————

//函数③

voidInverse(SqList&L){

inti,t;

for(i=0;i<L.length/2;i++)

{

t=*(L.elem+i);

*(L.elem+i)=*(L.elem+L.length-i-1);

*(L.elem+L.length-i-1)=t;

}

}

voidmain(){

SqListLA,LB,LC;

inta[4]={3,5,8,11},b[7]={2,6,8,9,11,15,20};

inti;

InitList(LA);

InitList(LB);

InitList(LC);

for(i=0;i<4;i++)

ListInsert(LA,i+1,a[i]);

for(i=0;i<7;i++)

ListInsert(LB,i+1,b[i]);

printf("LA=");

Print(LA);

printf("LB=");

Print(LB);

printf("n");

MergeList1(LA,LB,LC);

printf("①LC=");

Print(LC);

printf("n");

MergeList2(LA,LB,LC);

printf("②LB=");

Print(LB);

printf("n");

printf("③LC=");

Inverse(LC);

Print(LC);

}

推荐阅读
  • 努比亚z9max手机音乐效验

    该机拥有HIFI级音乐芯片,音乐效果不凡。具体体现在:1.音量调节,正常听音乐中高低音都是一个音量,而杜比音效能动态扩大某个音量。比如放打鼓声,杜比会及时提高低音加强鼓声。2.加强音域,杜比音效有开阔、集中、…

    百科 2024-09-20
  • 是atChristmas还是inChristmas

    此处该用“on”。在圣诞节正确表达应为 “on Christmas ”。有具体日期的,比如知道几月几日的都用“on” ;不知道日期,但知道年份和月份的用“in” ,知道具体时间,比如几点几分用“at”。…

    百科 2024-09-20
  • 个体工商户应交纳什么税

    纳税标准根据国家税务总局《个体工商户定期定额征收管理办法》文件精神 ,定期定额征收方式适用的税种及税率如下:1、根据《中华人民共和国增值税暂行条例》规定,自2009年1月1日起,小规模纳税人增值税征收率为3%…

    百科 2024-09-20
  • 材料成本差异率为负数是什么意思

    材料成本差异额,是指材料的实际成本和计划成本之间的差额。差异率负数表示节约差异,即实际成本比计划成本小。正数表示超支差异,即实际成本比计划成本大。…

    百科 2024-09-20
  • 塞翁失马焉知非福是什么意思

    比喻一时虽然受到损失,反而因此能得到好处。也指坏事在一定条件下可变为好事,反之亦然。形容人的心态,一定要乐观向上,任何事情都有二面性,不好的一面,有可能向好的一面转化。塞翁失马,焉知非福出自《 淮南子…

    百科 2024-09-20