线性链表实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
2012 ——2013 学年第 1 学期
实验课程数据结构与算法学生姓名
实验项目线性表的顺序存储学院计算机科学技术
实验性质班级学号
实验地点同组人数第组
实验日期第周星期第节
成绩
环境参数
一、实验目的及要求
二、实验原理、实验内容
三、实验仪器设备及材料
四、操作方法与实验步骤
五、实验数据记录及处理
六、实验结果分析及讨论
一、实验目的
1.掌握用Visual C++6.0上机调试单链表的基本方法
2.掌握单链表的插入、删除、查找、求表长以及有序单链表的逆序算法的实现
二、实现内容
1、单链表基本操作的实现
[问题描述]要在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点并用指针p指示,然后申请一个由指针s 指示的结点空间,并置x为其数据域值,最后修改第i-1个结点,并使x结点的指针指向第i个结点,要在带头结点的单链表h中删除第i个结点,首先要计数寻找到第i个结点并使指针p指向其前驱第i-1个结点,然后删除第i个结点并释放被删除结点空间。
[基本要求]用链式存储结构实现存储
[实现提示]链式存储结构不是随机存储结构,即不能直接取到单链表中某个结点,而要从单链表的头结点开始一个一个地计数寻找。
三、实验步骤
1、定义节点类型
2、进行单链表的初始化
3、查看初始化的单链表
4、使用switch-case结构进行选择操作
5、采用递归,使选择操作可以持续进行
四、实验代码
#include
using namespace std;
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
LinkList LinkListInit()
{
Lnode *L;
L=(Lnode *)malloc(sizeof(Lnode));
if(L == NULL)
{
printf("申请内存空间失败\n");
}
L->next = NULL;
return L;
}
LinkList CreateList()
{
Lnode *L;
ElemType x;
L=(Lnode *)malloc(sizeof(Lnode));
L->next = NULL;
// scanf("%d " ,&x);
cin>>x;
while(x != -1)
{
Lnode *p;
p=(Lnode *)malloc(sizeof(Lnode));
p->data=x;
p->next=L->next;
L->next=p;
// scanf("%d " ,&x);
cin>>x;
}
return L;
}
LinkList CreateListNormal()
{
Lnode *L,*Last;
ElemType x;
L=(Lnode *)malloc(sizeof(Lnode));
L->next = NULL;
Last = L;
cin>>x;
while(x != -1)
{
Lnode *p;
p=(Lnode *)malloc(sizeof(Lnode));
p->data=x;
Last ->next = p;
Last=p;
cin>>x;
}
Last->next = NULL;
return L;
}
int GetLocate(LinkList L,ElemType e) {
LinkList p;
int i=1;
p = L->next;
while(p)
{
if(p->data == e)
{
return i;
}
else
{
p = p->next;
}
++i;
}
return -1;
}
LinkList InsertElemType(LinkList L,int mIndex,ElemType e) {
Lnode *pre, *p;
int j=0;
pre = L;
for(j=1;j { pre = pre->next; } p=(Lnode *)malloc(sizeof(Lnode)); p->data = e; p->next = pre->next; pre->next = p; return L; } LinkList DeleteElemType(LinkList L, int mIndex,ElemType e) { Lnode *p , *s, *q; int j=0 , k=0; q=L; while(q) { q=q->next; k++; } if(mIndex<1 || mIndex>k) { return NULL; } for(p=L;j { p=p->next; } s=p->next; p->next = s->next;