中南民族大学数据结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
院系:计算机科学学院专业:
年级: 2010级
课程名称:数据结构
学号:
姓名:
指导教师:
2012年 6 月 1日
年级 2010
班号2班学号
专业姓名
实验名称2 单链表的相关操作演示
实验
类型
设计型综合型创新型
实验目的或要求实验目的:
通过上机实践,使学生进一步掌握线性表的逻辑定义、存储结构以及相关应用。实验要求:
自定义存储结构,用C或C++语言编写程序,要求程序模块清晰,菜单界面,有运行结果。
四个题目任选一个写入实验报告。
实验原理(算法流程)1、单链表的相关操作演示:
typedef struct LNode
{
float data;
struct LNode *next;
}LNode,*LinkList;//链表节点的定义
void CreateList_L(LinkList &L,int n){逆序创建一个链表,L为链表的头结点,n为输入的元素的个数}
int Length_LinkList(LinkList L){将链表L中的节点个数输出出来(不包括头结点),返回值为输出的节点数;}
void InsertList_L(LinkList &L,int i,float e){将e插入链表L中的i号位置;核心算法是:现在链表中找到第i-1号位置,然后将要插入的e插到i-1的后面}
void DeleteList_L(LinkList &L,int i,float e){将链表L中的第i号位置的元素e删除;核心算法:从头结点开始往下找,找到第i-1号位置,然后将第i号节点删除,再把后面的节点接上}
void DemandList_L(LinkList &L,int i,float e){查询链表L中的第i号位置的元素e;核心算法:找到第i号位置,然后输出出来}
void OrderList_L(LinkList &L){将链表L中的数据递增排序;核心算法是:新申请一个头结点,将链表L中的元素进行比较,找到最大的元素所在的节点,将它取出来连接到新的头结点的next指针上,然后再找出次大的,再连接到头结点的next指针上,如此循环,直到链表L的next指向空即完成,然后将新的链表的头设置为L,销毁新的头结点指针}
void PrintList_L(LinkList &L) {打印函数,一次将链表L中的内容输出出来}
void delLinkList_L(LinkList &L){释放链表L}
组
内
分
工
无(
可
选
)
实
验
结
果
分
析
及
心
得
体
会
心得体会:
首先我觉得要注意的是创建链表的时候要注意将next指针赋值为空;插入、删除、查询函数关键就是位置的查找,找到后执行相应的操作就可以了,当然还要注意些地方,比如删除不能超出链表的长度,插入不能超出插入的范围等等;其他的一些就是细节上的问题,什么时候用引用传旨,什么时候用形参传值都是要注意的。
成
绩
评
教师签名:
定
2012年月日
备注:源代码附后,源代码要求有注释说明
#include
#include
#include
typedef struct LNode
{
float data;
struct LNode *next;
}LNode,*LinkList;//链表节点的定义
void CreateList_L(LinkList &L,int n)
{//逆序创建一个链表
LinkList p,q;int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;q=L;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
cout<<"Please input data:";
cin>>p->data;
cout< p->next=q->next; q->next=p; q=p; } } int Length_LinkList(LinkList L) {//返回链表的长度的函数 int i; LinkList p; p=L; for(i=0;p->next!=NULL;i++) p=p->next; cout<<"Single Length:"< return i; } void InsertList_L(LinkList &L,int i,float e) {//在链表L第i个位置插入元素e LinkList p,s;int j,m; p=L;j=0; m=Length_LinkList(L); if(!L->next) { cout<<"Error!Nothing!"< exit(1); } else//找到位置i-1,在它的后面插入需要插入的元素 { if(i>m+1&&i<0)//i要小于链表长度m+1 { cout<<"Insert Error!"< exit(1); } else//找到第i-1个位置,在后面插入一个元素 { while(p&&j {