单链表实验报告单链表实验报告.doc
文本预览下载声明
单链表的基本操作
1.实验题目
问题描述:实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。通过代码的编写理解并掌握单链表的过程编写以及作用。(2)输出单链表中的数据元素逻辑结构:线性结构
存储结构:带头结点的单链表
定义结点类型LNode,每个结点包括数据域data和指针域next。定义头指针LinkList。编写如下函数:
1、createlist(LinkList L);用尾插法创建一个带头结点的单链表。
2、print(LinkList L);输出该单链表中的数据元素。
3、ListLength(LinkList L);求该单链表的长度。
4、GetElem(LinkList L,int i,ElemType e);查找第i个元素。
5、SetElem(LinkList L,int i,ElemType m);修改第i个元素。
6、ListInsert (LinkList L, int i, ElemType e );在第i个元素前插入一个元素。7、ListDelete(LinkList L,int i,ElemType e2);删除第i个元素。
8、main();通过case结构来调用createlist(LinkList L)、GetElem(LinkList L,int i,ElemType e)、SetElem(LinkList L,int i,ElemType m)、ListInsert (LinkList L, int i, ElemType e )、ListDelete(LinkList L,int i,ElemType e2)
经过多次调试,本程序能很好的完成实验要求的各项功能。
#includestdio.h
#includeconio.h
#includestdafx.h
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef int Status;
typedef struct LNode
{ ElemType data;
LNode *next;
} LNode,*LinkList;
Status createlist(LinkList L) //尾插法创建带头结点的单链表
{ int ch;
L=new LNode;
L-next=NULL;
printf(请输入单链表中的数据:);
scanf(%d, ch);
LinkList r=L;
while(ch!=0)
{ LinkList p=new LNode;
p-data=ch;
p-next=NULL;
r-next=p;
r=p;
scanf(%d, ch); }
return OK; }
void print(LinkList L) //输出单链表
{ LinkList p=L-next;
printf(单链表为:\n);
while(p)
{ printf(%2d,p-data);
p=p-next; }}
Status ListLength(LinkList L) //求单链表的长度
{ int k=0;
LinkList p=L-next;
while(p){
k++;
p=p-next;}
printf(\n);
printf(单链表的长度为 %d: , k);
printf(\n);
return k; }
Status GetElem(LinkList L,int i,ElemType e)
{ LinkList p=new LNode;
p=L-next; int j=1;
while(pji)
{ p=p-next;j++;
} //顺指针向后查找,直至p指到第i个结点或p为空止
if(!p||ji)
return ERROR; //第i个结点不存在
e=p-data;
printf(第%2d个元素为:%2d\n ,i,e);
printf(\n);
return OK;}
Status SetElem(LinkList L,int i,ElemType m)
{ LinkList p=new LNode;
p=L-next; int j=1;
while(pji)
{ p=p-next;j++;
} //顺指针向后查找,直至p指到第i个结点或p为空止
if(!p||ji)
return ERR
显示全部