清华严蔚敏《数据结构》的全部代码文档格式.docx
- 文档编号:19330115
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:84
- 大小:46.74KB
清华严蔚敏《数据结构》的全部代码文档格式.docx
《清华严蔚敏《数据结构》的全部代码文档格式.docx》由会员分享,可在线阅读,更多相关《清华严蔚敏《数据结构》的全部代码文档格式.docx(84页珍藏版)》请在冰豆网上搜索。
typedefstruct
{
ElemType*elem;
/*存储空间基址*
intlength;
/*当前xx*/
intlistsize;
/*当前分配得存储容量(以sizeof(ElemType为单位)*/
}SqList;
bo2-1、c"
/*bo2-1、c顺序表示得线性表(存储结构由c2-1、h定义)得基本操作(12个)*/
StatusInitList(SqList*L)/*算法2、3*/
{/*操作结果:
构造一个空得顺序线性表*/
(*L)、elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
(*L)、elem)
exit(OVERFLOW);
/存储分配失败*/
(*L)、length=0;
/*空表长度为0*/
(*L)、listsize二LIST_INIT_SIZE初始存储容量*/
returnOK;
}
StatusDestroyList(SqList*L)
{/*初始条件:
顺序线性表L已存在。
操作结果:
销毁顺序线性表L*/
free((*L)、elem);
(*L)、elem=NULL;
(*L)、length=0;
(*L)、listsize=0;
returnOK;
StatusClearList(SqList*L)
将L重置为空表*/
StatusListEmpty(SqListL)
若L为空表,则返回
TRUE否贝"
返回FALSE*/
if(L、length==0)
returnTRUE;
else
returnFALSE;
intListLength(SqListL)
返回L中数据元素个数*/
returnL、length;
StatusGetElem(SqListL,inti,ElemType*e)
顺序线性表L已存在,1<
i<
ListLength(L)*/
/*操作结果:
用e返回L中第i个数据元素得值*/
if(i<
1||i>
L、length)
exit(ERROR);
*e=*(L、elem+i-1);
intLocateElem(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType))
顺序线性表L已存在,compare。
就是数据元素判定函数(满足为1,否则为0)*/
/*操作结果:
返回L中第1个与e满足关系compare()得数据元素得位序。
*//*若这样得数据元素不存在,则返回值为0。
算法2、6*/
ElemType*p;
inti=1;
/*i得初值为第1个元素得位序*/
p=L、elem;
/*p得初值为第1个元素得存储位置*/
while(i<
=L、length&
&
!
compare(*p++,e))
++i;
=L、length)
returni;
return0;
StatusPriorElem(SqListL,ElemTypecur_e,ElemType*pre_e)
顺序线性表L已存在*/
若cur_e就是L得数据元素,且不就是第一个,则用pre_e返回它得前驱,*/
/*否则操作失败,pre_e无定义*/
inti=2;
ElemType*p=L、elem+1;
*p!
=cur_e)
p++;
i++;
if(i>
L、length)
returnINFEASIBLE;
*pre_e=*--p;
StatusNextElem(SqListL,ElemTypecur_e,ElemType*next_e)
next_e
若cur_e就是L得数据元素,且不就是最后一个,则用返回它得后继,*/
/*否则操作失败,next_e无定义*/
ElemType*p=L、elem;
L、length&
if(i==L、length)
*next_e=*++p;
StatusListlnsert(SqList*L,inti,ElemTypee)/算法2、4*/
ListLength(L)+1*/
在L中第i个位置之前插入新得数据元素e,L得长度加1*/
ElemType*newbase,*q,*p;
(*L)、length+1)/*i值不合法*/
returnERROR;
if((*L)、length>
=(*L)、listsize)/*当前存储空间已满,增加分配*/
newbase=(ElemType*)realloc((*L)、elem,((*L)listsize+LlSTlNCREMENT)*sizeof(ElemType));
newbase)
(*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*/、returnOK;
StatusListDelete(SqList*L,inti,ElemType*e)/*算法2、5*/
删除L得第i个数据元素,并用e返回其值,L得长度减1*/ElemType*p,*q;
(*L)、length)/*i值不合法*/
p=(*L)、elem+i-1;
/*p为被删除元素得位置*/
*e=*p;
/*被删除元素得值赋给e*/
q=(*L)、elem+(*L)、length-1;
/*表尾元素得位置*/
for(++p;
pv二q;
++p)/*被删除元素之后得元素左移*/
*(p-1)=*p;
(*L)、length--;
/*表长减1*/
StatusListTraverse(SqListL,void(*vi)(ElemType*))
依次对L得每个数据元素调用函数vi()。
一旦vi()失败,则操作失败*//*vi()得形参加&
,表明可通过调用vi()改变元素得值*/
inti;
for(i=1;
i<
=L、length;
i++)
vi(p++);
printf("
\n"
);
Statusequal(ElemTypec1,ElemTypec2)
{/*判断就是否相等得函数,Union()用到*/
if(c1==c2)
voidUnion(SqList*La,SqListLb)/算法2、1*/
{/*将所有在线性表Lb中但不在La中得数据元素插入到La中*/
ElemTypee;
intLa_len,Lb_len;
La_len=ListLength(*La);
/*求线性表得长度*/
Lb_len=ListLength(Lb);
=Lb_len;
GetElem(Lb,i,&
e);
/*取Lb中第i个数据元素赋给e*/if(!
LocateElem(*La,e,equal))/*La中不存在与e相同得元素,则插入之*/ListInsert(La,++La_len,e);
voidprint(ElemType*c)
%d"
*c);
voidmain()
SqListLa,Lb;
Statusi;
intj;
i=InitList(&
La);
if(i==1)/*创建空表La成功*/
for(j=1;
jv=5;
j++)/*在表La中插入5个元素*/
i=ListInsert(&
La,j,j);
La二"
/*输出表La得内容*/
ListTraverse(La,print);
InitList(&
Lb);
/*也可不判断就是否创建成功*/
j++)/*在表Lb中插入5个元素*/i=ListInsert(&
Lb,j,2*j);
Lb="
/*输出表Lb得内容*/
ListTraverse(Lb,print);
Union(&
La,Lb);
newLa="
/*输出新表La得内容*/
/*algo2-2、c实现算法2、2得程序*/
c1、h"
c2-1、h"
voidMergeList(SqListLa,SqListLb,SqList*Lc)算法2、2*/
{/*已知线性表La与Lb中得数据元素按值非递减排列。
*/
/*归并La与Lb得到新得线性表Lc,Lc得数据元素也按值非递减排列*/inti=1,j=1,k=0;
E-emTypeaLbj-
一nifLisf(LC)r^wH)}*Lc*、
Lal-enuLis产engfh(La)八
Lbl-enuLis产engfh(Lb)八
whi-e(AHLal-enQOQOAHLbl-en)/**La>
»
LbM皿EH)}*/宀
GefE-em(LaAQOai)八
Gem-em(Lbjdbj)八
if(aAHbj)
Lisf-nsert(LC++Ka三
+±
e-se
宀
Lisf-nsert(LC++Kbj)八
++"
whi-e(AHLal-en)/**L?
LEH)}^*LbH)}*/宀
亠2_」24
Gem-em(La」++QOaix
Lisf-nsert(LC++Ka三whi-e0AHLbl-en)/**Lb^H)}bn*LaH)}*/宀
Gem-em(Lbj++QObj)八Lisf-nsert(LC++Kbj)八voidp「inf(E-emType*c)
p「inff(=%d=*c)八
voidmaino
SqLis产p&
lg
Ik4H宀3U18三亘7HN3689二二525一nifLisf(QOLa)r^wH)}*La*、for5rhAH4j++)/*m»
La甘B>
4->
昌洲*/匚sf-nsert(QOLa・Lau—二)八p「inff(・La!
)r鸯圧*LaliN翊*、
亠3/亠24
/*创建空表Lb*/
jv=7;
j++)/*在表Lb中插入7个元素*/
ListInsert(&
Lb,j,b[j-1]);
MergeList(La,Lb,&
Lc);
Lc="
/*输出表Lc得内容*/
ListTraverse(Lc,print);
/*algo2-3、c实现算法2、7得程序*/
voidMergeList(SqListLa,SqListLb,SqList*Lc)算法2、7*/
{/*已知顺序线性表La与Lb得元素按值非递减排列。
/*归并La与Lb得到新得顺序线性表Lc,Lc得元素也按值非递减排列*/
ElemType*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=(ElemType*)malloc((*Lc)、listsize*sizeof(ElemType));
(*Lc)、elem)/*存储分配失败*/
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++;
*pc++=*pb++;
=pa_last)/*表La非空且表Lb空*/
/*插入La得剩余元素*/
while(pb<
=pb_last)/*表Lb非空且表La空*/
/*插入Lb得剩余元素*/
SqListLa,Lb,Lc;
/*创建空表La*/
La="
j<
=5;
j++)/*在表Lb中插入5个元素*/
/*algo2-4、c修改算法2、7得第一个循环语句中得条件语句为开关语句,且当*//**pa=*pb时,只将两者中之一插入Lc。
此操作得结果与算法2、1相同
bo2-1、c"
intcomp(ElemTypec1,ElemTypec2)
if(c1<
c2)
i=1;
elseif(c1==c2)
i=0;
i=-1;
voidMergeList(SqListLa,SqListLb,SqList*Lc)
{/*另一种合并线性表得方法(根据算法2、7下得要求修改算法2、7)*/
pa=La、elem;
pb=Lb、elem;
(*Lc)、listsize=La、length+Lb、length;
/*此句与算法2、7不同*/
PC"
*LC),e-em'
'
E-emType*)ma--oc((*LC}s=sfsN-e*sizeof(E-emType)=if(一(*LC)丿e-em)exif(OVERFLOW}_pal-asllL^e-em+La-engfh——k八pb—-asllLbAe-em+Lb>
-engfh丄whi-e(paAHPal-asQSQOpbAHPbl-asf)/**La>
LbM^H)}*/swifch(comp(*pa「pb))/*乓Q>
*M2,7^0*/宀caseppb++case」;
pc++H*pa++
break
case;
pc++H*pb++whi-e(paAHPal-asf)/**La^H)}bn*LbH)}*/
*pc++H*pa++
whi-e(pbAHPbl-asf)/**Lb^H)}bn*LaH)}*/
*pc++H*pb++
(*LC),-engfhHPC—(*LC),e-emrs'
乓Q*_voidprinfmemTypeo
亠8/亠24
/*输出表La得内容*/ListTraverse(La,print);
j++)/*在表Lb中插入5个元素*/ListInsert(&
/*algo2-5、c实现算法2、11、2、12得程序*/
c2-2、h"
/*c2-2、h线性表得单链表存储结构*/
structLNode
ElemTypedata;
structLNode*next;
};
typedefstructLNode*LinkList;
/*另一种定义LinkList得方法*/
bo2-2、c"
/*bo2-2、c单链表线性表(存储结构由c2-2、h定义)得基本操作(12个)*/
StatusInitList(LinkList*L)
{/*操作结果:
构造一个空得线性表L*/
*L=(LinkList)malloc(sizeof(structLNode));
/*产生头结点,并使L指向此头结点
*/if(!
*L)/*存储分配失败*/
(*L)->
next二NULL;
/*指针域为空*/
StatusDestroyList(LinkList*L)
线性表L已存在。
销毁线性表L*/
LinkListq;
while(*L)
q=(*L)->
next;
free(*L);
*L=q;
StatusClearList(LinkListL)/不改变L*/
LinkListp,q;
p=L->
/*p指向第一个结点*/
while(p)/*没到表尾*/
q=p->
free(p);
p=q;
L->
/*头结点指针域为空*/
StatusListEmpty(LinkListL)
若L为空表,则返回TRUE否则返回FALSE*/
if(L->
next)/*非空*/
intListLength(LinkListL)
inti=0;
LinkListp=L->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 华严 全部 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)