清华严蔚敏数据结构的全部代码实现C语言Word文档格式.docx
- 文档编号:16115337
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:89
- 大小:42.26KB
清华严蔚敏数据结构的全部代码实现C语言Word文档格式.docx
《清华严蔚敏数据结构的全部代码实现C语言Word文档格式.docx》由会员分享,可在线阅读,更多相关《清华严蔚敏数据结构的全部代码实现C语言Word文档格式.docx(89页珍藏版)》请在冰豆网上搜索。
/*Status是函数的类型,其值是函数结果状态代码,如OK等*/
typedefintBoolean;
/*Boolean是布尔类型,其值是TRUE或FALSE*/
/*实现算法的程序*/
#include"
"
typedefintElemType;
#include"
/*线性表的动态分配顺序存储结构*/
#defineLIST_INIT_SIZE10/*线性表存储空间的初始分配量*/
#defineLISTINCREMENT2/*线性表存储空间的分配增量*/
typedefstruct
{
ElemType*elem;
/*存储空间基址*/
intlength;
/*当前长度*/
intlistsize;
/*当前分配的存储容量(以sizeof(ElemType)为单位)*/
}SqList;
/*顺序表示的线性表(存储结构由定义)的基本操作(12个)*/
StatusInitList(SqList*L)/*算法*/
{/*操作结果:
构造一个空的顺序线性表*/
(*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).listsize=0;
StatusClearList(SqList*L)
将L重置为空表*/
StatusListEmpty(SqListL)
若L为空表,则返回TRUE,否则返回FALSE*/
if==0)
returnTRUE;
else
returnFALSE;
intListLength(SqListL)
返回L中数据元素个数*/
return;
StatusGetElem(SqListL,inti,ElemType*e)
顺序线性表L已存在,1≤i≤ListLength(L)*/
/*操作结果:
用e返回L中第i个数据元素的值*/
if(i<
1||i>
exit(ERROR);
*e=*+i-1);
intLocateElem(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType))
顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)*/
返回L中第1个与e满足关系compare()的数据元素的位序。
*/
/*若这样的数据元素不存在,则返回值为0。
算法*/
ElemType*p;
inti=1;
/*i的初值为第1个元素的位序*/
p=;
/*p的初值为第1个元素的存储位置*/
while(i<
=&
&
!
compare(*p++,e))
++i;
=
returni;
return0;
StatusPriorElem(SqListL,ElemTypecur_e,ElemType*pre_e)
顺序线性表L已存在*/
若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,*/
/*否则操作失败,pre_e无定义*/
inti=2;
ElemType*p=+1;
*p!
=cur_e)
p++;
i++;
if(i>
returnINFEASIBLE;
*pre_e=*--p;
StatusNextElem(SqListL,ElemTypecur_e,ElemType*next_e)
若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,*/
/*否则操作失败,next_e无定义*/
ElemType*p=;
if(i==
*next_e=*++p;
StatusListInsert(SqList*L,inti,ElemTypee)/*算法*/
顺序线性表L已存在,1≤i≤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+LISTINCREMENT)*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*/
StatusListDelete(SqList*L,inti,ElemType*e)/*算法*/
删除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;
p<
++p)/*被删除元素之后的元素左移*/
*(p-1)=*p;
(*L).length--;
/*表长减1*/
StatusListTraverse(SqListL,void(*vi)(ElemType*))
依次对L的每个数据元素调用函数vi()。
一旦vi()失败,则操作失败*/
/*vi()的形参加'
'
,表明可通过调用vi()改变元素的值*/
inti;
for(i=1;
i<
=;
i++)
vi(p++);
printf("
\n"
);
Statusequal(ElemTypec1,ElemTypec2)
{/*判断是否相等的函数,Union()用到*/
if(c1==c2)
voidUnion(SqList*La,SqListLb)/*算法*/
{/*将所有在线性表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*/
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;
j<
=5;
j++)/*在表La中插入5个元素*/
i=ListInsert(&
La,j,j);
La="
/*输出表La的内容*/
ListTraverse(La,print);
InitL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华严 数据结构 全部 代码 实现 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)