单链表的基本操作 实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一单链表的基本操作(1)依次从键盘读入数据,建立带头结点的单链表;
(2)输出单链表中的数据元素
(3)求单链表的长度;
(4)从链表中查找元素;
(5)从链表中查找与给定元素相同的元素在顺序表中的位置;
(6)实现在指定位置插入和删除元素的功能;
(7)求链表中的最大元素和平均值;
(8)销毁链表;
三、测量数据与调试结果
(1)依次从键盘读入数据,建立带头结点的单链表
(2)输出单链表中的数据元素
(3)求单链表的长度
(4)从链表中查找元素
(5)从链表中查找与给定元素相同的元素在顺序表中的位置
(6)实现在指定位置插入和删除元素的功能
(7)求链表中的最大元素和平均值;
(8)销毁链表;
四、代码
#include
#include
/* 定义ElemType为int类型*/ typedef int ElemType;
#define OK 1
#define ERROR 0
#define flag -0
/* 单链表的结点类型*/ typedef struct LNode {ElemType data;
struct LNode *next;
} LNode,*LinkList;
/* 初始化单链表*/
LinkList InitLinkList()
{LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return L; }
/* 清空单链表*/
void ClearLinkList(LinkList L)
{L->next=NULL; printf("链表已经清空\n"); } void DestoryList(LNode *head)
{LNode *p,*q;
p=head;
q=head->next;
while(p)
{ free(p);
p=q; /* 使用指针前判断其非空*/
if (q)
q=q->next;
}
printf("链表销毁成功!\n");
} /* 检查单链表是否为空*/
int LinkListEmpty(LinkList L)
{if(L->next==NULL) return OK;
else return ERROR; }
/* 遍历单链表*/
void LinkListTraverse(LinkList L) {LinkList p;
p=L->next;
if(p==NULL) printf("单链表为空表\n");
else
{ printf("链表中的元素为:\n");
while(p!=NULL)
{ printf("%d ",p->data);
p=p->next; }
}
printf("\n"); }
/* 求单链表长度*/
int LinkListLength(LinkList L)
{LinkList p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{ j++;
p=p->next;
}
return j;
}
/* 从链表中查找元素*/
LinkList GetLinkList(LinkList L,int i)
{LinkList p;
int j;
p=L->next;
j=1;
while(p!=NULL&&j
{ p=p->next; j++;
}
if (j==i)
return p;
else return NULL;
}
/* 从链表中查找与给定元素值相同的元素在顺序表中的位置*/ int LocateLinkList(LinkList L,ElemType x)
{LinkList p;
int j;
p=L->next;
j=1;
while ( p!=NULL && p->data != x)
{ p=p->next;
j++;}
if(p) return j;
else return 0; }
/* 向链表中插入元素*/ void LinkListInsert(LinkList L, int i, ElemType e)
{LinkList p,s;
int j;
j=1;
p=L;
while(p&&j
{ p=p->next;
j++;}
if(p==NULL||j>i)
printf("插入位置不正确\n");
else {s=(LNode *)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
printf("%d已插入到链表中\n",e); } }
/* 从链表中删除元素*/
void LinkListDelete(LinkList L,int i)
{LinkList p,q;
int j;
j=1;
p=L;
while(p->next&&j
{ p=p->next;
j++;}