数据结构算法整理C语言版Word文档下载推荐.docx
- 文档编号:13848327
- 上传时间:2022-10-14
- 格式:DOCX
- 页数:58
- 大小:87.59KB
数据结构算法整理C语言版Word文档下载推荐.docx
《数据结构算法整理C语言版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构算法整理C语言版Word文档下载推荐.docx(58页珍藏版)》请在冰豆网上搜索。
//已知线性表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->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 整理 语言版