单链表的基本操作 实验一

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++;}

相关文档
最新文档