实现单链表的各种基本运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现单链表的各种基本运算
一、实验目的
了解单链表表的结构特点及有关概念,掌握单链表的各种基本操作算法思想及其实现。
二、实验内容
编写一个程序,实现顺序表的各种基本运算:
1、初始化单链表;
2、单链表的插入;
3、单链表的输出;
4、求单链表的长度
5、判断单链表是否为空;
6、输出单链表的第i位置的元素;
7、在单链表中查找一个给定元素在表中的位置;
8、单链表的删除; 9、释放单链表
三、算法思想与算法描述简图
主函数main void InitList(LinkList*&L) 初始化单链表L
void DestroyList(LinkList*&L)//释放单链表L
int ListEmpty(LinkList*L)//判断单链表L是否为空集
int Listlength(LinkList*L)//返回单链表L的元素个数
void DispList(LinkListt*L)//输出单链表L
int GetElem(LinkList*L,int i,char e)/*ElemType e)获
取单链表L中的第i个元素*/
int LocateEmpty(LinkList*L,char e)/*ElemType e)在单
链表L中查找元素e*/
int ListInsert(LinkList*&L,int i,char e)/*ElemType e)
在单链表中第i个位置上插入元素e*/
int ListDelete(LinkList*&L,int i,char &e)/*ElemType
e)在单链表L中删除第i个元素*/
四、实验步骤与算法实现
#include
#include
typedef char ElemType;
typedef struct LNode//定义单链表
{ ElemType data;
struct LNode *next;
}LinkList;
void InitList(LinkList*&L)
{ L=(LinkList*)malloc(sizeof(LinkList));//创建头结点
L->next=NULL;//头结点赋值为空
}
void DestroyList(LinkList*&L)//销毁单链表(释放单链表L占用的内存空间即逐一释放全部结点的空间)
{ LinkList*p=L,*q=p->next;
while(q!=NULL)
{free(p);
p=q;
q=p->next;}
free(p);
}
int ListEmpty(LinkList*L)//判线性表是否为空表ListEmpty(L)
{ return(L->next==NULL);}//若单链表L没有数据结点,则返回真,否则返回假。
int ListLength(LinkList*L)//求线性表的长度ListLength(L)
{ LinkList*p=L;int i=0;
while(p->next!=NULL)
{i++;
p=p->next;
}
return(i);//返回单链表L中数据结点的个数
}
void DispList(LinkList*L)//输出线性表DispList(L)
{LinkList*p=L->next;
while (p!=NULL)//逐一扫描单链表L的每个数据结点,并显示各结点的data域值。
{printf("%c",p->data);
p=p->next;
}
printf("\n");
}
int GetELem(LinkList*L,int i,ElemType&e)//求线性表L中指定位置的某个数据元素GetElem(L,i,&e)
{int j=0;
LinkList*p=L;
while(j
{j++;
p=p->next;
}
if(p==NULL)
return 0;//不存在第i个数据结点
else
{e=p->data;//存在第i个数据结点
return 1;
}
}
int LocateElem(LinkList*L,ElemType e)//按元素值查找LocateElem(L,e) {LinkList *p=L->next;
int n=1;
while (p!=NULL&&p->data!=e)//在单链表L中从头开始找第1个值域与e相等的结点,若存在这样的结点,则返回位置,否则返回0。
{p=p->next;
n++;
}
if(p=NULL)
return (0);
else
return (n);
}
int ListInsert(LinkList*&L,int i,ElemType e)//插入数据元素ListInsert(&L,i,e)
{int j=0;
LinkList*p=L,*s;
while(j {j++; p=p->next; } if(p==NULL) return 0;//未找到位序为i-1的结点 else {s=(LinkList*)malloc(sizeof(LinkList)); s->data=e; s->next=p->next;//将*s插入到*p之后