链表文档格式.docx
- 文档编号:3180352
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:11
- 大小:16.56KB
链表文档格式.docx
《链表文档格式.docx》由会员分享,可在线阅读,更多相关《链表文档格式.docx(11页珍藏版)》请在冰点文库上搜索。
returnOK;
}
typedefstructNode
ElemTypedata;
structNode*next;
}Node;
typedefstructNode*LinkList;
/*定义LinkList*/
/*初始化顺序线性表*/
StatusInitList(LinkList*L)
{
*L=(LinkList)malloc(sizeof(Node));
/*产生头结点,并使L指向此头结点*/
if(!
(*L))/*存储分配失败*/
returnERROR;
(*L)->
next=NULL;
/*指针域为空*/
/*初始条件:
顺序线性表L已存在。
操作结果:
若L为空表,则返回TRUE,否则返回FALSE*/
StatusListEmpty(LinkListL)
if(L->
next)
returnFALSE;
else
returnTRUE;
将L重置为空表*/
StatusClearList(LinkList*L)
LinkListp,q;
p=(*L)->
next;
/*p指向第一个结点*/
while(p)/*没到表尾*/
{
q=p->
free(p);
p=q;
}
/*头结点指针域为空*/
返回L中数据元素个数*/
intListLength(LinkListL)
inti=0;
LinkListp=L->
while(p)
i++;
p=p->
returni;
顺序线性表L已存在,1≤i≤ListLength(L)*/
/*操作结果:
用e返回L中第i个数据元素的值*/
StatusGetElem(LinkListL,inti,ElemType*e)
intj;
LinkListp;
/*声明一结点p*/
p=L->
/*让p指向链表L的第一个结点*/
j=1;
/*j为计数器*/
while(p&
&
j<
i)/*p不为空或者计数器j还没有等于i时,循环继续*/
{
p=p->
/*让p指向下一个结点*/
++j;
if(!
p||j>
i)
/*第i个元素不存在*/
*e=p->
data;
/*取第i个元素的数据*/
顺序线性表L已存在*/
返回L中第1个与e满足关系的数据元素的位序。
*/
/*若这样的数据元素不存在,则返回值为0*/
intLocateElem(LinkListL,ElemTypee)
while(p)
if(p->
data==e)/*找到这样的数据元素*/
return0;
顺序线性表L已存在,1≤i≤ListLength(L),*/
在L中第i个位置之前插入新的数据元素e,L的长度加1*/
StatusListInsert(LinkList*L,inti,ElemTypee)
LinkListp,s;
p=*L;
j<
i)/*寻找第i个结点*/
}
if(!
p||j>
i)
s=(LinkList)malloc(sizeof(Node));
/*生成新结点(C语言标准函数)*/
s->
data=e;
next=p->
/*将p的后继结点赋值给s的后继*/
p->
next=s;
/*将s赋值给p的后继*/
删除L的第i个数据元素,并用e返回其值,L的长度减1*/
StatusListDelete(LinkList*L,inti,ElemType*e)
while(p->
next&
i)/*遍历寻找第i个元素*/
(p->
next)||j>
q=p->
next=q->
/*将q的后继赋值给p的后继*/
*e=q->
/*将q结点中的数据给e*/
free(q);
/*让系统回收此结点,释放内存*/
依次对L的每个数据元素输出*/
StatusListTraverse(LinkListL)
visit(p->
data);
\n"
);
/*随机产生n个元素的值,建立带表头结点的单链线性表L(头插法)*/
voidCreateListHead(LinkList*L,intn)
inti;
srand(time(0));
/*初始化随机数种子*/
*L=(LinkList)malloc(sizeof(Node));
next=NULL;
/*先建立一个带头结点的单链表*/
for(i=0;
i<
n;
i++)
p=(LinkList)malloc(sizeof(Node));
/*生成新结点*/
data=rand()%100+1;
/*随机生成100以内的数字*/
next=(*L)->
next=p;
/*插入到表头*/
/*随机产生n个元素的值,建立带表头结点的单链线性表L(尾插法)*/
voidCreateListTail(LinkList*L,intn)
LinkListp,r;
/*L为整个线性表*/
r=*L;
/*r为指向尾部的结点*/
p=(Node*)malloc(sizeof(Node));
r->
next=p;
/*将表尾终端结点的指针指向新结点*/
r=p;
/*将当前的新结点定义为表尾终端结点*/
/*表示当前链表结束*/
intmain()
LinkListL;
ElemTypee;
Statusi;
intj,k;
i=InitList(&
L);
初始化L后:
ListLength(L)=%d\n"
ListLength(L));
for(j=1;
j<
=5;
j++)
i=ListInsert(&
L,1,j);
在L的表头依次插入1~5后:
L.data="
ListTraverse(L);
ListLength(L)=%d\n"
i=ListEmpty(L);
L是否空:
i=%d(1:
是0:
否)\n"
i);
i=ClearList(&
清空L后:
=10;
ListInsert(&
L,j,j);
在L的表尾依次插入1~10后:
L,1,0);
在L的表头插入0后:
GetElem(L,5,&
e);
第5个元素的值为:
%d\n"
e);
for(j=3;
=4;
k=LocateElem(L,j);
if(k)
第%d个元素的值为%d\n"
k,j);
没有值为%d的元素\n"
j);
k=ListLength(L);
/*k为表长*/
for(j=k+1;
j>
=k;
j--)
i=ListDelete(&
L,j,&
/*删除第j个数据*/
if(i==ERROR)
删除第%d个数据失败\n"
删除第%d个的元素值为:
j,e);
依次输出L的元素:
"
j=5;
ListDelete(&
/*删除第5个数据*/
\n清空L后:
CreateListHead(&
L,20);
整体创建L的元素(头插法):
\n删除L后:
CreateListTail(&
整体创建L的元素(尾插法):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 链表