链表的基本操作实验报告.doc
文本预览下载声明
学号 1445203105 姓名 王胜博 班级 软件5班 成绩 实验名称 实验三 链表的基本操作 是否原创 是 《数据结构》实验报告
实验要求
编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。
实验目的
通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验2对比,掌握线性结构两种不同存储方式的区别。
设计思想
用函数执行各个功能,随机插入元素
主要源代码
#includestdio.h
#includestdlib.h
#includetime.h
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}Node, *LinkList;
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
if(!(*L))
printf(存储分配失败\n);
(*L)-next=NULL;
}
void DestroyList(LinkList L)
{
LinkList p;
while(L)
{
p=L-next;
free(L);
L=p;
}
}
int ListLength(LinkList L)
{
LinkList p;
int i=0;
p=L-next;
while(p)
{
i++;
p=p-next;
}
return i;
}
int GetElem(LinkList L,int i,ElemType e){
LinkList p;
p=L-next;
int j=1;
while(pji){
p=p-next;
++j;
}
e=p-data;
return e;
}
int GetElemLo(LinkList L,int i,ElemType e){
LinkList p;
p=L-next;
int j=1;
while(p-data!=ij=ListLength(L))
{
p=p-next;
++j;
}
e=j;
return e;
}
void FindPre(LinkList L,int x)
{
LinkList p;
p=L;
if(p-next-data==x)
{
printf(第一个元素没有前驱\n);
}
else{
while(p-next)
{
if(p-next-data==x)
{
printf(%d的前驱结点是:%d\n,x,p-data);
break;
}
else{
p=p-next;
}
}
}
}
void FindNext(LinkList L,int x)
{
LinkList p;
p=L-next;
while(p)
{
if(p-data==x)
{
printf(%d的后继结点是:%d\n,x,p-next-data);
break;
}
else
{
p=p-next;
}
if(p-next==NULL)
{
printf(最后一个元素没有后继\n);
break;
}
}
}
void LinkInset_L(LinkList L,int i,ElemType e){
LinkList p;
p=L;
int j=0;
while(pji-1)
{
p=p-next;
++j;
}
if(!p||ji-1)
printf(i小于1或者i大于表长加1\n);
LinkList s;
s=(LinkList)malloc(sizeof (Node));
s-data=e;
s-next=p-next;
p-next=s;
}
void ListDelete_L(LinkList L,int i,ElemType e){
LinkList p,q;
p=L;
int j=0;
while(p-next ji-1)
{
p=p-next;
++j;
}
if(!p-next ||ji-1)
printf(删除位置不合理\n);
q=p-next;
p-next=q-next;
e=q-data;
free(q);
printf(已删除的元素是:%d\n,e);
}
void visit(ElemType
显示全部