数据结构线性表单链表实验报告

合集下载

数据结构上机实验报告

数据结构上机实验报告
数据结构上机
实验报告
谭文治
电信0801
080900120
【实验一】线性表
【实验目的】:
1.掌握线性表的两类存储结构(顺序存储结构和链式存储结构)的描述方法。
2.掌握在顺序结构中实现查找、插入、删除操作的基本方法。
3.掌握在各种链表结构中实现查找、插入、删除操作的基本方法。
【实验内容】
【1】已知线性表LA的数据元素(n个,n为偶数),现要求将LA拆开成两个新的线性表LB,LC。要求LB中的数据元素为LA中的奇数位序的数据元素(a1, a3, …, an-1),LC中的数据元素为LA中的偶数位序的数据元素(a2, a4, …, an)。
for(i=0;i<v.length;i++)
scanf("%c",&v.list[i]); //对la进行赋值
}来自百度文库
void initlist(sqlist &v) //构造一个空的线性表
{v.elem=(char *)malloc(max*sizeof(char));
v.length=0;
}
void insert(sqlist &v,int j,char c)
void initlist(sqlist &);
void print(sqlist); //显示线性表中所有元素

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告

实验目的:

掌握单链表的基本操作,学会使用单链表实现各种算法。

实验内容:

实现单链表的基本操作,包括创建、插入、删除、访问等。利用单链表完成以下算法:

- 单链表逆序

- 查找单链表中的中间节点

- 删除单链表中的倒数第K个节点

- 合并两个有序单链表为一个有序单链表

实验步骤:

1. 创建单链表

在创建单链表时,先定义一个结构体Node来表示链表中的节点,节点包括数据域和指针域,指针域指向下一个节点。然后,

用指针p指向链表的头节点,将头节点的指针域初始化为NULL。

2. 插入节点

在单链表中插入节点的操作分为两种情况:

- 在链表头插入节点

- 在链表中间或尾部插入节点

无论是哪种情况,先将新节点的指针域指向要插入的位置的下

一个节点,再将要插入的位置的指针域指向新节点即可。

3. 删除节点

删除链表节点的操作同样分为两种情况:

- 删除头节点

- 删除中间或尾部节点

要删除头节点,先用一个指针将头节点指向的下一个节点保存起来,再将头节点释放掉。要删除中间或尾部节点,先用一个指针指向要删除节点的前一个节点,然后将指向要删除节点的前一个节点的指针域指向要删除节点的下一个节点,最后将要删除的节点释放掉。

4. 单链表逆序

单链表逆序可以使用三个指针来完成,分别为pre指针、cur指针和next指针。首先将pre指针和cur指针指向NULL,然后循环遍历链表,将cur指针指向当前节点,将next指针指向当前节点的下一个节点,然后将当前节点的指针域指向pre指针,最后将pre指针和cur指针向前移动一个节点,继续进行循环。

数据结构课程设计实验报告 完整版

数据结构课程设计实验报告 完整版

第一章链表的应用

线性表是数据结构中最简单、最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响着后继课程的学习。线性表的顺序存储结构,即顺序表的概念相对比较简单,因此,本章的主要任务是使用有关单链表的操作来实现通讯录信息系统的管理。

1.1设计要求

本章的设计实验要求使用有关链表的操作来实现通讯录信息系统的管理。为了验证算法,通讯录管理包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询及通讯录表的输出等。主控菜单的设计要求使用数字0—5来选择菜单项,其他输入则不起作用。

程序运行后,给出6个菜单项的内容和输入提示:

1.通讯录链表的建立

2. 通讯者结点的插入

3. 通讯者结点的查询

4. 通讯者结点的删除

5. 通讯录链表的输出

0. 退出管理系统

请选择0—5:

1.2设计分析

1.2.1主控菜单函数设计分析

1.实现循环和功能选择

首先编写一个主控菜单驱动程序,输入0—5以进入相应选择项。假设输入选择用变量sn存储,它作为menu_select函数的返回值给switch语句。使用for循环实现重复选择,并在主函数main()中实现。

实际使用时,只有选择大于5或小于0的值,程序才能结束运行,这就要使用循环控制。这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用了“return”语句,也可以使用“exit(0);”语句。

2.得到sn的合理值

如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。假设函数名为menu_select,对于sn的输入值,在switch 中case语句对应数字1—5,对于不符合要求的输入,提示输入错误并要求重新输入。将该函数与主函数合在一起,编译运行程序,即可检查并验证菜单选择是否正确。

《数据结构》线性结构实验报告

《数据结构》线性结构实验报告

《数据结构》线性结构实验报告

2、源程序:

#include <stdio.h>

#include<stdlib.h>

#define MAXSIZE 1024

typedef int elemtype;

typedef struct SequenStack

{

elemtype data[MAXSIZE];

int top;

}SequenStack;

SequenStack * Init_SequenStack()

{

SequenStack * S;

S = (SequenStack *)malloc(sizeof(SequenStack));

if (S == NULL)

return S;

S->top = -1;

return S;

}

int SequenStack_Empty(SequenStack * S)//判栈空

{

if (S->top == -1)

{

return 1;

}

{

int a;

printf("请以十进制输入一个数:\n");

scanf_s("%d", &a);

printf("转化为二进制为:");

Conversion(a);

printf("\n");

}

运行结果:

3、源程序:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct node

{

char data;

struct node* next;

}LinkStack;

//初始化

LinkStack* Init_LinkStack()

单链表的实现实验报告

单链表的实现实验报告

单链表的实现实验报告

篇一:数据结构单链表实验报告

一、设计人员相关信息

1. 设计者姓名、学号和班号:12地信李晓婧12012242983

2. 设计日期:2014.

3. 上机环境:VC++6.0

二、程序设计相关信息

1. 实验题目:编写一个程序,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上设计一个程序,完成如下功能:

(1)初始化单链表;

(2)采用尾插法依次插入元素a,b,c,d,e;

(3)输出单链表

(4)输出单链表长度

(5)判断单链表是否为空

(6)输出单链表第3个元素

(7)输出元素a的位置

(8)在第4个元素位置上插入元素f

(9)输出单链表

(10)删除第三个元素

(11)输出单链表

(12)释放单链表

2. 实验项目组成:

(1)插入和删除节点操作

(2)建立单链表

尾插法建表

(3)线性表基本运算在单链表中的实现

初始化线性表

销毁线性表

判断线性表是否为空表

求线性表的长度

3. 实验项目的程序结构(程序中的函数调用关系图):

4. 实验项目包含的各个文件中的函数的功能描述:

? 尾插法建表CreateListR:将新节点插到当前链表的表尾上,为此必须增加一个尾指针

r,使其始终指向当前链表的尾节点。

? 初始化线性表InitList:该运算建立一个空的单链表,即创建一个头节点;

? 销毁线性表DestroyList:释放单链表占用的内存空间,即逐一释放全部节点的空间; ? 判断线性表是否为空表ListEmpty:若单链表没有数据节点,则返回真,否则返回假; ? 求线性表的长度ListLength:返回单链表中数据

C语言-线性表实验报告

C语言-线性表实验报告
/* 单链表的结点类型 */
typedef struct LNode
{DataType data;
struct LNode *next;
}LNode,*LinkedList;
LinkedList LinkedListInit() //初始化单链表
void LinkedListClear(LinkedList L) // 清空单链表
{printf("%d ",p->data); p=p->next;}
}
printf("\n");
}
(5)求单链表长度
int LinkedListLength (LinkedList L)
{LinkedList p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{ j++;p=p->next; }
p=LinkedListGet(L,j);
if(p) printf("链表中第%d个元素的值为:%d\n",j,p->data);
else printf("查询位置不正确\n");
break;
case 7:printf("请输入待查询元素的值:");
scanf("%d",&e);

数据结构-单链表实验报告

数据结构-单链表实验报告

单链表实验报告

一、实验目的

1、帮助读者复习C++语言程序设计中的知识。

2、熟悉线性表的逻辑结构。

3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。

二、实验内容

[问题描述]

实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。

[基本要求]

(1)依次从键盘读入数据,建立带头结点的单链表;

(2)输出单链表中的数据元素

(3)求单链表的长度;

(4)根据指定条件能够取元素和修改元素;

(5)实现在指定位置插入和删除元素的功能。

三、算法设计

(1)建立带表头结点的单链表;首先输入结束标志,然后建立循环逐个输入数据,直到输入结束标志。

(2)输出单链表中所有结点的数据域值;首先获得表头结点地址,然后建立循环逐个输出数据,直到地址为空。

(3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y;建立两个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,建立循环扫描链表。当当前结点指针域不为空且数据域等于x的时候,申请结点并给此结点数据域赋值为y,然后插入当前结点后面,退出函数;当当前结点指针域为空的时候,申请结点并给此结点数据域赋值为y,插入当前结点后面,退出函数。

(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。建立三个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,最后一个备用;建立整形变量l=0;建立循环扫描链表。当当前结点指针域为空的时候,如果当前结点数据域等于k,删除此结点,l++,跳出循环,结束操作;如果当前结点数据域不等于k,跳出循环,结束操作。当当前结点指针域不为空的时候,如果当前结点数据域等于k,删除此结点,l++,继续循环操作;如果当前结点数据域不等于k,指针向后继续扫描。循环结束后函数返回变量l的值,l便是删除的结点的个数。

数据结构实验报告--单链表

数据结构实验报告--单链表

2016级数据结构实验报告

实验名称:实验一线性表——题目1

学生姓名:李文超

班级: 2015661131

班内序号: 15

学号: 2015522147

日期: 2016年11月13日

1.实验要求

实验目的:

根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。

线性表存储结构(五选一):

1、带头结点的单链表

2、不带头结点的单链表

3、循环链表

4、双链表

5、静态链表

线性表的基本功能:

1、构造:使用头插法、尾插法两种方法

2、插入:要求建立的链表按照关键字从小到大有序

3、删除

4、查找

5、获取链表长度

6、销毁

7、其他:可自行定义

编写测试main()函数测试线性表的正确性。

2.程序分析

2.1 存储结构

单链表的存储:

(1)链表用一组任意的存储单元来存放线性表的结点。这组存储单元既可以是连续的,也可以是不连续的,甚至零散地分布在内存的某些位置。

(2)链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个元素值的同时,还要存储该元素的直接后继元素的位置信息,这个信息称为指针或链。

结点结构

┌──┬──┐ data域---存放结点值的数据域

│data│next│ next域---存放结点的直接后继的地址的指针域

└──┴──┘

单链表在内存中的存储示意

地址内存单元

1000H

头指针 1020H

1080H

10C0H

2.2 关键算法分析

1、关键算法:

(1)头插法

自然语言描述:

a:在堆中建立新结点

b:将a[i]写入到新结点的数据域

c:修改新结点的指针域

d:修改头结点的指针域。将新结点加入链表中

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告

一、实验目的

本实验的目的是通过设计和实现单链表数据结构,加深对于单

链表的理解和掌握,并能够灵活应用单链表解决实际问题。

二、实验内容

1·理解单链表的概念和基本操作

2·设计并实现单链表数据结构

3·实现单链表的创建、插入、删除和查找操作

4·应用单链表解决实际问题

三、实验步骤

1·理解单链表的概念和基本操作

单链表是一种常见的线性链表结构,它由多个节点组成,每个

节点包含一个数据元素和一个指向下一个节点的指针。单链表的基

本操作包括创建链表、插入节点、删除节点和查找节点等。

2·设计并实现单链表数据结构

首先,定义单链表节点的结构,包含数据元素和指向下一个节

点的指针。然后,定义一个链表结构,包含头节点和尾节点的指针。

3·实现单链表的创建、插入、删除和查找操作

●创建链表:通过依次插入节点的方式创建一个空的链表。

●插入节点:根据插入位置,将新节点插入到链表中的适当位置。

●删除节点:根据节点的值或位置,删除链表中的对应节点。

●查找节点:根据节点的值或位置,在链表中查找对应节点。

4·应用单链表解决实际问题

通过设计和实现单链表数据结构,应用单链表解决实际问题,如实现一个通讯录、一个待办事项列表等。

四、实验结果

根据实验步骤,我们成功设计并实现了单链表数据结构,并应用单链表解决了实际问题。经过测试,单链表的创建、插入、删除和查找操作均正常工作。

五、实验总结

通过本次实验,我们深入学习了单链表的概念和基本操作。通过设计和实现单链表数据结构,并应用单链表解决实际问题,加深了对于单链表的理解和掌握。

六、附件

数据结构线性表实验报告

数据结构线性表实验报告

数据结构线性表实验报告

数据结构线性表实验报告

1.实验目的

1.1 理解线性表的概念和操作方法

1.2 学习线性表的顺序存储结构和链式存储结构

1.3 掌握线性表的各种基本操作算法

2.实验内容

2.1 实现线性表的顺序存储结构

a. 定义顺序存储结构的数据类型和长度

b. 实现线性表的初始化操作

c. 实现线性表的插入操作

d. 实现线性表的删除操作

e. 实现线性表的查找操作

2.1.6 实现线性表的更新操作

2.1.7 实现线性表的打印操作

2.2 实现线性表的链式存储结构

a. 定义链式存储结构的数据类型和长度

b. 实现线性表的初始化操作

c. 实现线性表的插入操作

d. 实现线性表的删除操作

e. 实现线性表的查找操作

2.2.6 实现线性表的更新操作

2.2.7 实现线性表的打印操作

2.3 实现线性表的其他操作

a. 实现线性表的长度计算

b. 实现线性表的合并操作

c. 实现线性表的排序操作

3.实验步骤

3.1 初始化线性表

a. 选择合适的存储结构

b. 设置线性表的初始状态

c. 完成线性表的初始化工作

3.2 插入操作

a. 根据线性表的存储结构选择插入点

b. 将要插入的元素放入插入点位置

c. 调整线性表的长度和位置

3.3 删除操作

a. 根据线性表的存储结构选择删除点

b. 删除指定位置的元素

c. 调整线性表的长度和位置

3.4 查找操作

a. 根据线性表的存储结构选择查找方法

b. 实现线性表的按值查找

3.4.3 实现线性表的按位置查找

3.5 更新操作

a. 根据线性表的存储结构选择更新点

b. 更新指定位置的元素

c. 调整线性表的长度和位置

数据结构线性表试验报告

数据结构线性表试验报告

线性表上机实习

1、实验目的

(1)熟悉将算法转换为程序代码的过程。

(2)了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。

(3)熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。(4)了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言描述方法。(5)熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。

2、实验要求

(1)熟悉顺序表的插入、删除和查找。

(2)熟悉单链表的插入、删除和查找。

3、实验内容:

①顺序表

(1)抽象数据类型定义

typedef struct {

TypeData data[maxsize]; //容量为maxsize的静态顺手表

int n; //顺序表中的实际元素个数

}SeqList; //静态顺序表的定义

在本次实验中,首先建立一个空的静态顺序表,然后键盘输入数据存入表中,然后进入菜单选择界面,通过不同的数字输入,实现对顺序表,删除,插入,查找,显示等操作。

(2)存储结构定义及算法思想

在顺序表结构体的定义中,typedef int TypeData 为整型,存储结构如下:

for(n=0;n<m;n++){

cout<<"请输入线性表数据"<<endl;

cin>>[n]; //顺序将数据存入顺序表

} //其他存储与此类似,都是直接赋值与数组的某一位

插入版块子函数:

void insert(SeqList &L) //插入数据

{

int a,b,c,k;

数据结构线性表操作实验报告

数据结构线性表操作实验报告

《数据结构》实验报告

实验题目:线性表的操作

实验目的:1.掌握上机调试线性表的基本方法;

2.掌握线性表的一些基本操作;

实验内容:将两个有序链表合并为一个有序链表

一、需求分析

1.实验程序中先创建两个有序链表,演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入两个链表中的相应数据。

2.将两个链表合并时可按数据从大到小或从小到大合并,用户根据提示可选择一种排序方式。

3.程序执行命令包括:

(1)构造链表;(2)输入数据;(3)合并两个链表,根据用户需求选择一种排序方式;(4)将合并结果输出;(5)结束

4.测试数据:

链表1数据为:2,4,6,7,10

链表2数据为:1,3,5,6,7,12

按从小到达合并为:1,2,3,4,5,6,6,7,7,10,12;

按从大到小合并为:12,10,7,7,6,6,5,4,3,2,1;

二、概要设计

1.基本操作

Linklist creat ()

操作结果:构造一个链表,并输入数据,返回头节点指针。

void print(Linklist head)

初始条件:链表已存在;

操作结果:将链表输出。

void MergeList_1(Linklist La,Linklist Lb)

初始条件:有序线性链表La 和Lb 已存在;

操作结果:将La 和Lb 两个链表按从小到大的顺序合并。

void MergeList_2(Linklist La,Linklist Lb)

初始条件:有序线性链表La 和Lb 已存在;

操作结果:将La 和Lb 两个链表按从大到小的顺序合并。

数据结构线性表单链表实验报告

数据结构线性表单链表实验报告

数据结构实验报告

班级姓名同组者/ 成绩

日期2020.3.25指导教师

实验名称线性表及其应用

一、实验目的:

1、深刻理解线性表的逻辑特性及其顺序、链式存储方式的特点。

2、熟练掌握线性表的常用操作(建立、插入、删除、遍历等)在顺序、链式存储上的实现。

3、加深对C/C++、Java等编程语言的相关知识点的理解(如结构体/类、指针/引用、函数/方法、

引用参数等)。

二、实验内容:

1、

题目

根据给定的整型数组,以尾插法建立一个单链表,并实现以下操作:

①查找:输入一个欲查找的整数,找到则显示第一个相匹配的整数在单链表中所处的位置,若不存在,则显示提示信息。

②删除:输入一个欲删除的整数e,若存在则在单链表中删除第一个值为e的元素。

③插入:输入一个欲插入位置i和欲插入元素e,将e插入到第i个整数之前(注意i的合法性)。

源码

#include<stdio.h>

#include<stdlib.h>

typedef int Elemtype;

typedef int Status;

typedef struct node// 定义存储节点

{

int data;// 数据域

struct node *next;// 结构体指针

} *linklist,node;//结构体变量,结构体名称

linklist creat (int n)//创建单链表

{

linklist head,r,p;// 定义头指针r,p,指针

int x,i;

head=(node *)malloc(sizeof(node));// 生成头结点

数据结构线性表实验报告五篇

数据结构线性表实验报告五篇

数据结构线性表实验报告五篇

第一篇:数据结构线性表实验报告

实验报告

课程名:数据结构

实验名:线性表及其操作姓名:班级:学号:

撰写时间:2014.09.24

一实验目的与要求

1.掌握线性表的实现

2.掌握线性表的基本操作的实现

二实验内容

• 分别完成线性表的顺序表示及链式表示

• 在两种表示上, 分别实现一些线性表的操作, 至少应该包括–在第i个位置插入一个元素–删除第i个元素–返回线性表长

–返回第i个元素的值

三实验结果与分析

#include #include //---------线性表链式表示-----------struct V//声明一个结构体类型struct V { int value;struct V * next;//定义结构体变量};void PrintLink(struct V*p)//定义一个结构体指针{ while(p!=NULL)//只要指针指向的变量不为NULL;就会一直循环链表指向下一个结构体

{

printf(“%d, ”,(*p).value);

p=(*p).next;//指针指向下一个结构体

} printf(“n”);} void Link(){

struct V*head;head=(struct V*)malloc(sizeof(struct V));//开辟一个长度为size的内存

(*head).value=-100;//表头为-100(*head).next=NULL;printf(“------------线性表链式表示------------n”);

int i,n=10;struct V*p=head;printf(“10个数据:n”);for(i=0;i

数据结构线性表实验报告

数据结构线性表实验报告

一、实验目的和要求

(1)理解线性表的逻辑结构特性。

(2)深入掌握线性表的两种存储方法,即顺序表和链表。体会这两种存储结构之间的差异。

(3)重点掌握顺序表和链表上各种基本运算的实现。

(4)综合运用线性表解决一些复杂的实际问题。

二、实验内容

实验2.1 编写一个程序algo2-1.cpp,实现顺序表的各种基本运算(假设顺序表的元素类型为char),并在此基础上设计一个程序exp2-1.cpp,完成如下功能:

(1)初始化顺序表L;

(2)采用尾插法依次插入元素a,b,c,d,e;

(3)输出顺序表L;

(4)输出顺序表L长度;

(5)判断顺序表L是否为空;

(6)输出顺序表L的第三个元素;

(7)输出元素a的位置;

(8)在第4个元素位置上插入元素f;

(9)输出顺序表L;

(10)删除L的第3个元素;

(11)输出顺序表L;

(12)释放顺序表L。

实验2.2 编写一个程序algo2-2.cpp,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上设计一个程序exp2-2.cpp,完成如下功能:

(1)初始化单链表h;

(2)采用尾插法依次插入元素a,b,c,d,e;

(3)输出单链表h;

(4)输出单链表h长度;

(5)判断单链表h是否为空;

(6)输出单链表h的第三个元素;

(7)输出元素a的位置;

(8)在第4个元素位置上插入元素f;

(9)输出单链表h;

(10)删除L的第3个元素;

(11)输出单链表h;、

(12)释放单链表h。

释放顺序表L。

实验2.3 编写一个程序algo2-3.cpp,实现双链表的各种基本运算(假设双链表的元素类型为char),并在此基础上设计一个程序exp2-3.cpp,完成如下功能:

数据结构图实验报告

数据结构图实验报告

数据结构图实验报告

一、实验目的

本次实验的主要目的是深入理解和掌握数据结构图的基本概念、原

理和操作方法,通过实际编程和操作,提高对数据结构的应用能力和

解决问题的能力。

二、实验环境

本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容

(一)线性表

1、顺序表

实现顺序表的创建、插入、删除、查找等基本操作。

分析顺序表在不同操作下的时间复杂度。

2、链表

实现单链表、双向链表的创建、插入、删除、查找等基本操作。

比较单链表和双向链表在操作上的优缺点。

(二)栈和队列

1、栈

实现顺序栈和链式栈。

用栈解决表达式求值问题。

2、队列

实现顺序队列和链式队列。

用队列模拟银行排队问题。

(三)树

1、二叉树

实现二叉树的创建、遍历(前序、中序、后序)。计算二叉树的深度和节点数。

2、二叉搜索树

实现二叉搜索树的插入、删除、查找操作。

分析二叉搜索树的性能。

(四)图

1、图的存储

实现邻接矩阵和邻接表两种图的存储方式。

比较两种存储方式的优缺点。

2、图的遍历

实现深度优先遍历和广度优先遍历算法。

用图的遍历解决最短路径问题。

四、实验步骤

(一)线性表

1、顺序表

定义一个数组来存储顺序表的元素,并使用一个变量记录当前表的长度。

插入操作时,需要判断插入位置是否合法,如果合法则将插入位置后的元素依次向后移动一位,然后将新元素插入指定位置。

删除操作时,先判断删除位置是否合法,合法则将删除位置后的元素依次向前移动一位,并更新表的长度。

查找操作通过遍历数组来实现。

分析不同操作的时间复杂度,插入和删除操作在最坏情况下为

O(n),查找操作在平均情况下为 O(n/2)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构实验报告

班级姓名同组者/ 成绩

日期2020.3.25指导教师

实验名称线性表及其应用

一、实验目的:

1、深刻理解线性表的逻辑特性及其顺序、链式存储方式的特点。

2、熟练掌握线性表的常用操作(建立、插入、删除、遍历等)在顺序、链式存储上的实现。

3、加深对C/C++、Java等编程语言的相关知识点的理解(如结构体/类、指针/引用、函数/方法、

引用参数等)。

二、实验内容:

1、

题目

根据给定的整型数组,以尾插法建立一个单链表,并实现以下操作:

①查找:输入一个欲查找的整数,找到则显示第一个相匹配的整数在单链表中所处的位置,若不存在,则显示提示信息。

②删除:输入一个欲删除的整数e,若存在则在单链表中删除第一个值为e的元素。

③插入:输入一个欲插入位置i和欲插入元素e,将e插入到第i个整数之前(注意i的合法性)。

源码

#include

#include

typedef int Elemtype;

typedef int Status;

typedef struct node// 定义存储节点

{

int data;// 数据域

struct node *next;// 结构体指针

} *linklist,node;//结构体变量,结构体名称

linklist creat (int n)//创建单链表

{

linklist head,r,p;// 定义头指针r,p,指针

int x,i;

head=(node *)malloc(sizeof(node));// 生成头结点

r=head;//r指向头结点

printf(" 输入数字:\n");

for(i=n;i>0;i--)//for循环用于生成第一个节点并读入数据{

scanf("%d",&x);

p=(node *)malloc(sizeof(node));

p->data=x;//读入第一个节点的数据

r->next=p;//把第一个节点连在头结点的后面

r=p;//循环以便于生成第二个节点

}

r->next=0;//生成链表后的断开符

return head;// 返回头指针

}

void output (linklist head) //输出链表

{

linklist p;

p=head->next;

do

{

printf("%3d",p->data);

p=p->next;

}

while(p);

printf("\n");

}

Status insert ( linklist &l,int i, Elemtype e)// 插入操作

{

int j=0;linklist p = l,s;

while(j

{

p=p->next;

++j;

}

if(!p || j>i-1)

return -1;

else

{

s=(node *)malloc(sizeof(node));

s->data=e;

s->next=p->next;

p->next=s;

return 1;

}

}

Status delect ( linklist &l,int i, Elemtype &e) //删除操作{

int j=0;

linklist p=l,q;

while(jnext)

{

p=p->next;

++j;

}

if(!p->next || j>i-1)

return -1;

else

{

q=p->next;

p->next=q->next;

e=q->data;

free(q);

return 1;

}

}

void combine(linklist la,linklist lb)//合并单链表{

node *pa,*pb,*pc;

linklist lc;

pa=la->next;

pb=lb->next;

lc=pc=la;

while(pa && pb){

if(pa->data<=pb->data){

pc->next=pa;

pc=pa;

pa=pa->next;

}

else{pc->next=pb;pc=pb;pb=pb->next;}

}

pc->next=pa?pa:pb;

free(lb);

}

Status GetElem(linklist l,int i,Elemtype &e )//查找操作{

linklist p;

int j;

p=l->next;

j=1;

while(p && j

{

p=p->next;

++j;

}

if(!p || j>i)

return -2;

e=p->data;

return e;

}

void main()

{

linklist la,lb;

int n;

int i,j;

相关文档
最新文档