数据结构算法整理C语言版Word文档下载推荐.docx

上传人:b****2 文档编号:13848327 上传时间:2022-10-14 格式:DOCX 页数:58 大小:87.59KB
下载 相关 举报
数据结构算法整理C语言版Word文档下载推荐.docx_第1页
第1页 / 共58页
数据结构算法整理C语言版Word文档下载推荐.docx_第2页
第2页 / 共58页
数据结构算法整理C语言版Word文档下载推荐.docx_第3页
第3页 / 共58页
数据结构算法整理C语言版Word文档下载推荐.docx_第4页
第4页 / 共58页
数据结构算法整理C语言版Word文档下载推荐.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

数据结构算法整理C语言版Word文档下载推荐.docx

《数据结构算法整理C语言版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构算法整理C语言版Word文档下载推荐.docx(58页珍藏版)》请在冰豆网上搜索。

数据结构算法整理C语言版Word文档下载推荐.docx

//已知线性表La和Lb中的元素按值非递减排列。

II归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。

intLa_len,Lb_len;

ElemTypeai,bj;

inti=1,j=1,k=0;

InitList(Lc);

while((i<

=La_len)&

&

(j<

=Lb_len)){IILa和Lb均非空

GetElem(La,i,ai);

GetElem(Lb,j,bj);

if(ai<

=bj){

ListInsert(Lc,++k,ai);

++i;

}else{

ListInsert(Lc,++k,bj);

++j;

while(i<

=La_len){

GetElem(La,i++,ai);

ListInsert(Lc,++k,ai);

while(j<

=Lb_len){

GetElem(Lb,j++,bj);

ListInsert(Lc,++k,bj);

}

}//MergeList

算法2.3

StatusInitList_Sq(SqList&

L){//算法2.3//构造一个空的线性表L。

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

if(!

L.elem)returnOK;

//存储分配失败

L.length=0;

//空表长度为0L.listsize=LIST_INIT_SIZE;

//初始存储容量returnOK;

}//InitList_Sq

算法2.4

StatusListInsert_Sq(SqList&

L,inti,ElemTypee){//算法2.4//在顺序线性表L的第i个元素之前插入新的元素e,

//i的合法值为1<

i<

ListLength_Sq(L)+1

ElemType*p;

if(i<

1||i>

L.length+1)returnERROR;

//i值不合法if(L.length>

=L.listsize){//当前存储空间已满,增加容量

ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

newbase)returnERROR;

L.elem=newbase;

//新基址

L.listsize+=LISTINCREMENT;

//增加存储容量}

ElemType*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

returnOK;

}//ListInsert_Sq

算法2.5

StatusListDelete_Sq(SqList&

L,inti,ElemType&

e){////在顺序线性表L中删除第i个元素,并用e返回其值。

1<

ListLength_Sq(L)。

//i的合法值为ElemType*p,*q;

if(i<

1||i>

L.length)returnERROR;

p=&

e=*p;

q=L.elem+L.length-1;

for(++p;

p<

++p)*(p-1)=*p;

--L.length;

//i值不合法

//p为被删除元素的位置

//被删除元素的值赋给e

//表尾元素的位置

//被删除元素之后的元素左移

//表长减1

}//ListDelete_Sq

算法2.6

intLocateElem_Sq(SqListL,ElemTypee,

Status(*compare)(ElemType,ElemType)){//

//在顺序线性表L中查找第1个值与e满足compare()的元素的位序。

//若找到,则返回其在L中的位序,否则返回0。

inti;

i=1;

//i的初值为第1个元素的位序

p=L.elem;

//p的初值为第1个元素的存储位置while(i<

=L.length&

!

(*compare)(*p++,e))++i;

=L.length)returni;

elsereturn0;

}//LocateElem_Sq

算法2.7

voidMergeList_Sq(SqListLa,SqListLb,SqList&

Lc){//

//已知顺序线性表La和Lb的元素按值非递减排列。

II归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列。

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

pa=La.elem;

pb=Lb.elem;

Lc.listsize=Lc.length=La.length+Lb.length;

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

if(!

Lc.elem)

exit(OVERFLOW);

II存储分配失败

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

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

while(pa<

=pa_last&

pb<

=pb_last){II归并

if(*pa<

=*pb)*pc++=*pa++;

else*pc++=*pb++;

=pa_last)*pc++=*pa++;

while(pb<

=pb_last)*pc++=*pb++;

}//MergeList

//插入La的剩余元素//插入Lb的剩余元素

算法2.8

StatusGetElem_L(LinkList&

L,inti,ElemType&

e){//

//L为带头结点的单链表的头指针。

//当第i个元素存在时,其值赋给e并返回0K,否则返回ERROR

LinkListp;

p=L->

next;

intj=1;

//初始化,p指向第一个结点,j为计数器

while(p&

j<

i){//顺指针向后查找,直到p指向第i个元素或p为空

p=p->

++j;

if(!

p||j>

i)returnERROR;

//第i个元素不存在

e=p->

data;

//取第i个元素

}//GetElem_L

算法2.9

StatusListlnsert_L(LinkList&

L,inti,ElemTypee){////在带头结点的单链线性表L的第i个

元素之前插入元素e

LinkListp,s;

p=L;

intj=0;

j<

i-1){//寻找第i-1个结点

p||j>

i-1)returnERROR;

//i小于1或者大于表长

s=(LinkList)malloc(sizeof(LNode));

//生成新结点

s->

data=e;

s->

next=p->

//插入L中

p->

next=s;

}//Linstlnsert_L

算法2.10

StatusListDelete_L(LinkList&

//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值

LinkListp,q;

p=L;

while(p->

next&

i-1){//寻找第i个结点,并令p指向其前趋p=p->

(p->

next)||j>

//删除位置不合理q=p->

next=q->

//删除并释放结点

e=q->

free(q);

}//ListDelete_L

算法2.11

voidCreateList_L(LinkList&

L,intn){//

//逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表LLinkListp;

L=(LinkList)malloc(sizeof(LNode));

L->

next=NULL;

//先建立一个带头结点的单链表

for(i=n;

i>

0;

--i){

p=(LinkList)malloc(sizeof(LNode));

data=random(200);

//改为一个随机生成的数字(200以内)p->

next=L->

L->

next=p;

//插入到表头

}//CreateList_L

算法2.12

voidMergeList_L(LinkList&

La,LinkList&

Lb,LinkList&

Lc){

//已知单链线性表La和Lb的元素按值非递减排列。

//归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。

LinkListpa,pb,pc;

pa=La->

pb=Lb->

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1