链表程序设计训练实习报告Word文档下载推荐.docx
《链表程序设计训练实习报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《链表程序设计训练实习报告Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。
#defineOK1
#defineFAILURE0
#defineTRUE1
#defineFALSE0
#defineERROR-1
typedefintElemType;
typedefintStatus;
typedefstructNode
{
ElemTypee;
structNode*next;
}ListNode,*list;
StatusDestroyList_Sl(listL)//销毁
listp;
if(!
L)returnERROR;
/*单向线性链表不存在*/
do{/*释放单向线性链表空间*/
p=L->
next;
L->
next=p->
deletep;
}while(L);
returnOK;
}
StatusListDelete_Sl(listL)
L)returnERROR;
/*单向线性链表结点L不存在*/
listset(intn)/*建立链表*/
listL,p,q;
L=newListNode;
e=0;
next=NULL;
p=L;
cout<
<
"
正序的数字:
;
for(inti=0;
i<
n;
i++)
{
if(q=newListNode)
ElemTypet;
cin>
>
t;
q->
e=t;
p->
next=q;
p=p->
}
else
while(p)
q=p;
p=NULL;
p=q->
if(i==n-1)
next=L->
returnL;
listset2(intn)
listL2,p,q;
if(L2=newListNode)
L2->
逆序数字:
intt;
{
q->
q->
next=L2->
L2->
}
else
p=L2;
while(p)
L2=p;
deleteL2;
p=p->
}
p=L2->
while(p->
next)
next=L2;
returnL2;
intmain()
listL,p,q,L2;
intn,ListDelete_number;
个数:
endl;
L=set(n);
inti=0;
p->
e<
'
\t'
i++;
if(i==n)
break;
}//单链正序测试
L2=set2(n);
while(p!
=L2)
ListDelete_number=ListDelete_Sl(L);
ListDelete_number="
ListDelete_number<
i=0;
剩下的:
}//删除结点及测试
DestroyList_Sl(L);
return0;
(三)、设计双向链表并实现其构建(包括正序及逆序建表)、插入、删除、销毁等基本操作算法
structNode*last;
last=p;
q=L->
反向:
last;
(四)、分析并使用循环链表解决“猴子选大王”问题
inte;
e=i+1;
next=L;
listL,p,q,t;
intn,m,i=0;
总个数:
跳下报的数字:
m;
/*while(p)
if(i==n+1)
}*/
while(!
((L==p->
next)&
&
(p==L->
next)))
if(p->
e>
0)
if(i%m==0)
q=p->
t=p->
t->
last=t;
delete"
p=t;
猴王:
e;
四实验分析及问题思考
1、分析双向循环链表与单向链表、循环链表、双向链表间的差异;
循环链表是在单向链表的基础上用最后面的指针指向头结点,而双向链表是在单向链表的基础上,定义一个指针,用后面的指向前面的结点。
2、分析数组与线性链表的优缺点;
数组不能删除其中元素,而链表可以删除结点。
实验自评
实验内容
自评结果(在对应格内打)
熟练
比较熟练
一般
不熟练
动态内存分配
线性链表的操作与应用
线性链表结构
正序、逆序构建线性链表
线性链表元素插入
线性链表元素删除
线性链表元素查找
实验体会
通过半年对于链表的学习,对于链表相对熟悉,能够熟练的应用,这与平时的练习是分不开的。
以后也要经常复习。