单链表的操作实现实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
预期结果:基本实现了单链表的基本 各种操作。
程序及运行结果正误判断:口非常好口/ 正确,切改进口基本正确,还需改进口还有错误
不足之处或设计经验小结:
(1)L是单钏的头指针的指针,用来接收头指针变量的地址,*L待初始化的单链表为头指针变量;
(2)节省了空间,访问结点时,只需知道头指针,就可以找到其他的元素;
{
ElemType data;
struct Node * next;
}Node,*LinkList;
/*初始化*/
void Init(LinkList *head)
{
*head=(LinkList)malloc(sizeof(Node));
(*head)->next=NULL;
}
LinkList create(int n)
〈〈数据结构》上机实验报告
学号:104100058
:德刚
班级:10A
实验时间:年月日
实验地点:同析3号楼
开发环境:C++
课程名称:数据结构----C语言描述
实验性质:口综合性实验口/ 设计性实验口验证实验
实验容:单链表的实现
题目来源: 口/ 教材页 题口 /教师补充口自选题

主要功能描述:链表的初始化、链表的创建(头部插入法、尾部插入法)、求表长、查找(按值查找、按序号查找)、
{
LinkList h,r,p;
int x,i;
h=(Node*)malloc(sizeof(Node));
r=h;
printf("请输入数据:\n");
for(i=1;i<=n;i++)
{
scanf("%d”,&x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
t=p;
}
}
return q;
}
int Inslist(LinkList *head,int i,ElemType x)
(
LinkList p,q;
p=(*head);
int j=0;
while(p&&j<i-1)
(
p=p->next;
j++;
}
if(!p||j>i-1)
(
printf("插入位置不合法!");
^长:从表头开始,将指针依次指向各个结点,一直到p->next-NULL为止,用j来计数。
查找:
(1)按值查找:表中查找第i个结点,找到就返回该结点的存储位置,用j来存储扫描过的结点数(j的初值为
0),但j-i时,结束。
(2)按序号查找:从表中第一个结点开始,当key等于查找到的元素的数据时停止查找。
return 0;
}
q=(Node*)malloc(sizeof(Node));
q->data=x;
q->next=p->next;
p->next=q;
return 1;
}
//输出
void Output(LinkList head)
{
/*定义节点指针类型,并指向首元结点
LinkList p;
p=head->next;
p=p->next;
}Fra Baidu bibliotek
return i;
}
/*查找*/
int Locate1(LinkList head,ElemType x)
{
LinkList p;
int i=1;
p=head->next;
r->next=p;
r=p;
}
r->next=NULL;
return h;
}
/*头部插入*/
int CreatfromH(LinkList head)
{
LinkList p;
ElemType x;
puts("输入数据,输入-100。结束输入!");
while(1)
{
scanf("%d”,&x);
if(x!=-1000)
while(p!=NULL)
{
printf("\n%d”,p->data);
p=p->next;
}
printf("\n");
}
/*求表长*/
int LengthList(LinkList head)
{
int i;
LinkList p;
i=0;
p=head->next;
while(p!=NULL)
{
i++;
(
p=(Node*)malloc(sizeof(Node));
p->data=x;
p->next=head->next;
head->next=p;
}
else break;
}
return 1;
return 0;
}
/*尾部插入*/
LinkList CreatfromT(LinkList head)
(
LinkList p,q,t;
(3)头插法建表得到的链表中的结点的次序和输入的顺序相反,尾插法则一致;
(4)求灯时,算法的时间复杂度为O (n)。
任课教师评语:
教师签字:年 月日
注:每学期至少有一次设计性实验。每学期结束请任课教师按时按量统一交到教学秘书处。
源程序文件名及组^^件:#include<stdio.h>,#include<stdlib.h>,#include<conio.h>,#include<windows.h>
ElemType x;
q=head;t=head;
puts(”输入数据,输入-1000结束输入!");
while(1)
(
scanf("%d”,&x);
if(x!=-1000)
(
p=(Node*)malloc(sizeof(Node));
p->data=x;
p->next=NULL;
t->next=p;
插入、删除、输出、两个有序单链表的合并等。
设计分析:
初始化:为单"申请头结点空间,将单链表设置为空;创建:(1)头部插入法:(a)初始化空表;(b)申请新结
点并赋值;(c)插入新结点;(d)插入第i个元素。
(2)尾部插入法:
(a)建空表(b)申请结点并赋值;(c)插入第一个结点;(d) r->next-s,r-s;
①算法设计思想②算法描述
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct Node
插入:在单链表中第i-1个结点并由指针指示,申请结点空间q,将数据域置为x,更新指针。
删除:从头结点开始,删除第i个结点并释放空间;
输出:当表不为空时,依次输出表中元素;
合并:与顺序表一样,只需为新的结点申请一个空间。
典型测试数据输入:输入数据个数:4数据:1, 2, 3, 4
输出:1 , 2, 3, 4
相关文档
最新文档