1数据结构-实验报告一(线性表的基本操作)

合集下载

实验01 线性表的基本操作

实验01 线性表的基本操作

实验01 线性表的基本操作一、实验目的1. 了解线性表的结构特点及有关概念;2. 理解线性表的存储结构;3. 掌握顺序表及单链表的基本操作算法。

二、实验内容1、编写程序实现顺序表的各种基本运算:初始化、插入、删除、取表元素、求表长、输出表、销毁、判断是否为空表、查找元素。

在此基础上设计一个主程序完成如下功能:(1)初始化顺序表L;(2)依次在表尾插入a,b,c,d,e五个元素;(3)输出顺序表L;(4)输出顺序表L的长度;(5)判断顺序表L是否为空;(6)输出顺序表L的第4个元素;(7)输出元素c的位置;(8)在第3个位置上插入元素f,之后输出顺序表L;(9)删除L的第2个元素,之后输出顺序表L;(10)销毁顺序表L。

2、编写程序实现单链表的各种基本运算:初始化、插入、删除、取表元素、求表长、输出表、销毁、判断是否为空表、查找元素。

在此基础上设计一个主程序完成如下功能:(1)初始化单链表L;(2)依次在表尾插入a,b,c,d,e五个元素;(3)输出单链表L;(4)输出单链表L的长度;(5)判断单链表L是否为空;(6)输出单链表L的第4个元素;(7)输出元素c的位置;(8)在第3个位置上插入元素f,之后输出单链表L;(9)删除L的第2个元素,之后输出单链表L;(10)销毁单链表L。

三、实验要点及说明一.顺序表1.顺序表初始化:(1)为顺序表L动态分配一个预定大小的数组空间,使elem 指向这段空间的基地址。

(2)将表的当前长度设为0.2.顺序表的取值:(1)判断指定的位置序号i值是否合理(1<=i<=L.length),若不合理则返回ERROR.(2)若i值合理,则将i个数据元素L.elem[i]赋给参数e,通过e返回第i个数据元素的传值。

3.顺序表的查找:(1)从第一个元素起,依次和e相比较,若找到与e相等的元素L.elem[i],则查找成功,返回该元素的序号i+1.(2)若查遍整个顺序表都没要找到,则查找失败,返回0.4.顺序表的插入:(1)判断插入位置i是否合法(i值的合法范围是1<=i<=n+1),若不合法则返回值ERROR.(2)判断顺序表的存储空间是否已满,若满则返回值ERROR(3)将第n个至第i个位置的元素依次向后移动一个位置,空出第i个位置(i=n+1时无需移动)。

数据结构实验一实验报告

数据结构实验一实验报告

欢迎下载
7

for(int i=1;i<=x;i++) {
printf(" 第%d 个学生 :\n",i); Input(&a); ListInsert(&L,i,a); } break; case 3: for(int i=1;i<=x;i++) { GetElem(&L,i,b); Output(&b); } break; case 4: char s[20]; printf(" 请输入要查找的学生姓名 :"); scanf("%s",s); if(Search(L,s,p)) Output(&(p->data)); else puts(" 对不起,查无此人 ");
void Input(ElemType *e) {
欢迎下载
5

printf(" 姓名 :"); scanf("%s",e->name); printf(" 学号 :"); scanf("%s",e->num); printf(" 成绩 :"); scanf("%lf",&e->grade); printf(" 输入完成 \n\n"); }
puts(" 请选择 :"); scanf("%d",&choose); switch(choose) {
case 1: if(InitList(p)) printf(" 成功建立链表 \n\n"); else printf(" 链表建立失败 \n\n"); break;

数据结构实验报告实验总结

数据结构实验报告实验总结

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。

通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。

下面对每一部分实验进行总结。

实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。

在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。

实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。

通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。

实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。

通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。

实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。

通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。

通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。

同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。

在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。

通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。

总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。

在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。

数据结构实验报告

数据结构实验报告

HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
数据结构
实验报告
实验项目实验一实验类别基础篇
学生姓名宋大超学生学号201501149 完成日期2016-10-9
指导教师袁科
实验成绩评阅日期
评阅教师
实验一线性表基本操作的编程实现
【实验目的】
线性表基本操作的编程实现
要求:
线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。

还鼓励学生利用基本操作进行一些更实际的应用型程序设计。

【实验性质】
验证性实验(学时数:2H)
【实验内容】
把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。

建议实现键盘输入数据以实现程序的通用性。

为了体现功能的正常性,至少要编制遍历数据的函数。

【注意事项】
1.开发语言:使用C。

2.可以自己增加其他功能。

数据结构--实验报告 线性表的基本操作

数据结构--实验报告 线性表的基本操作

数据结构..实验报告线性表的基本操作数据结构实验报告线性表的基本操作1.引言本实验报告旨在介绍线性表的基本操作。

线性表是一种常见的数据结构,它是一组有限元素的有序集合,其中每个元素之间存在一个特定的顺序关系。

线性表的操作包括插入、删除、查找等,这些操作对于有效地管理和利用数据非常重要。

2.实验目的本实验的目的是通过实践理解线性表的基本操作,包括初始化、插入、删除、查找等。

通过编写相应的代码,加深对线性表的理解,并掌握相应的编程技巧。

3.实验内容3.1 初始化线性表初始化线性表是指创建一个空的线性表,为后续的操作做准备。

初始化线性表的方法有多种,如顺序表和链表等。

下面以顺序表为例进行说明。

顺序表的初始化包括定义表头指针和设置表的长度等操作。

3.2 插入元素插入元素是指将一个新的元素插入到线性表的指定位置。

插入元素有两种情况:插入到表的开头和插入到表的中间。

插入元素的操作包括移动其他元素的位置以腾出空间,并将新的元素插入到指定位置。

3.3 删除元素删除元素是指将线性表中的某个元素删除。

删除元素有两种情况:删除表的开头元素和删除表的中间元素。

删除元素的操作包括将被删除元素的前一个元素与后一个元素进行连接,断开被删除元素与表的联系。

3.4 查找元素查找元素是指在线性表中寻找指定的元素。

查找元素的方法有多种,如遍历线性表、二分查找等。

查找元素的操作包括比较目标元素与线性表中的元素进行匹配,直到找到目标元素或遍历完整个线性表。

4.实验步骤4.1 初始化线性表根据线性表的类型选择相应的初始化方法,如创建一个空的顺序表并设置表的长度。

4.2 插入元素输入要插入的元素值和插入的位置,判断插入的位置是否合法。

如果合法,移动其他元素的位置以腾出空间,将新的元素插入到指定位置。

如果不合法,输出插入位置非法的提示信息。

4.3 删除元素输入要删除的元素值,判断元素是否在线性表中。

如果在,则找到目标元素的前一个元素和后一个元素,进行连接删除操作。

《数据结构》实验1实验报告

《数据结构》实验1实验报告

南京工程学院实验报告<班级>_<学号>_<实验X>.RAR文件形式交付指导老师。

一、实验目的1.熟悉上机环境,进一步掌握语言的结构特点。

2.掌握线性表的顺序存储结构的定义及实现。

3.掌握线性表的链式存储结构——单链表的定义及实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容1.顺序线性表的建立、插入及删除。

2.链式线性表的建立、插入及删除。

三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。

2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。

3.建立一个带头结点的单链表,结点的值域为整型数据。

要求将用户输入的数据按尾插入法来建立相应单链表。

四、程序主要语句及作用程序1的主要代码(附简要注释)public struct sequenlist{public const int MAXSIZE=1024; /*最大值为1024*/public elemtype[] vec;public int len; /* 顺序表的长度 */public sequenlist( int n){vec=new elemtype[MAXSIZE ];len = n;}};class Program{static void Main(string[] args){sequenlist list1 = new sequenlist(5);for (int i = 0; i < 5; i++){list1.vec[i] = i;}for (int i = 0; i < 5; i++){Console.Write("{0}---", list1.vec[i]) ;}Console.WriteLine("\n");Console.WriteLine("表长:{0}\n",list1.len );Console.ReadKey();}}程序2的主要代码(附简要注释)public void insertlist(int i, int x){if (len >= MAXSIZE)throw new Exception("上溢"); /*长度大于最大值则抛出异常*/if (i < 1 || i > len + 1)throw new Exception("位置");/插入位置小于1或大于len+1则抛出插入位置错误的异常for (int j = len; j >= i; j--)vec[j] = vec[j - 1]; //注意第j个元素存在数组下标为j-1处vec[i - 1] = x;len++;}};class Program{static void Main(string[] args){sequenlist list2 = new sequenlist(7);list2.vec[0] = 21;list2.vec[1] = 23;list2.vec[2] = 14;list2.vec[3] = 5;list2.vec[4] = 56;list2.vec[5] = 17;list2.vec[6] = 31;Console.Write("请输入第i个位置插入元素:");int loc =Convert.ToInt32( Console.ReadLine());Console.Write("请输入第{0}个位置插入的元素:", loc);int ele = Convert.ToInt32(Console.ReadLine());Console.WriteLine("插入前的线性表:");for (int i = 0; i < list2.len ; i++){Console.Write("{0}---", list2.vec[i]);}Console.WriteLine("\n");list2.insertlist(loc, ele);Console.WriteLine("插入后的线性表:");for (int i = 0; i < list2.len ; i++){Console.Write("{0}---", list2.vec[i]);}Console.WriteLine("\n");Console.ReadKey();}}程序3的主要代码(附简要注释)class Node{private int num;public int Num{set { num = value; }/输入值get { return num; }/获得值}private Node next;public Node Next{set { next = value; }get { return next; }}}class Pp{static void Main(string[] args){Node head;Node tempNode, tempNode1;int i;head = new Node();Console.WriteLine("输入六项数据:\n");Console.Write("输入第1项数据:");head.Num = Convert.ToInt32(Console.ReadLine());head.Next = null;tempNode = head;for (i = 1; i < 6; i++){tempNode1 = new Node();Console.Write("输入第{0}项数据:",i+1);tempNode1.Num = Convert.ToInt32(Console.ReadLine());/插入项转换为整形数值 tempNode1.Next = null;tempNode.Next = tempNode1;tempNode = tempNode.Next;}Console.WriteLine("线性表:");tempNode = head;for (i = 0; i < 6; i++){Console.Write("{0}", tempNode.Num);if (i < 5){Console.Write("--");}tempNode = tempNode.Next;}Console.ReadKey();}}五、程序运行结果截图程序1程序2程序3六、收获,体会及问题(写得越详细、越个性化、越真实越好,否则我不知道你做这个实验的心路历程,也就无法充分地判断你是否是独立完成的这个实验、你是否在做这个实验时进行了认真仔细地思考、通过这个实验你是否在实践能力上得到了提高)这次试验刚开始做时完全不知道从哪下手,才刚上了几节课,对于线性表、链式表都不是理解的很透彻,不知道用哪个软件编写程序。

数据结构--实验报告 线性表的基本操作

数据结构--实验报告 线性表的基本操作

数据结构--实验报告线性表的基本操作数据结构--实验报告线性表的基本操作一、引言本实验报告旨在通过实际操作,掌握线性表的基本操作,包括初始化、插入、删除、查找等。

线性表是最基本的数据结构之一,对于理解和应用其他数据结构具有重要的作用。

二、实验目的1·了解线性表的定义和基本特性。

2·掌握线性表的初始化操作。

3·掌握线性表的插入和删除操作。

4·掌握线性表的查找操作。

5·通过实验巩固和加深对线性表的理解。

三、线性表的基本操作1·初始化线性表线性表的初始化是将一个线性表变量设置为空表的过程。

具体步骤如下:(1)创建一个线性表的数据结构,包括表头指针和数据元素的存储空间。

(2)将表头指针指向一个空的数据元素。

2·插入元素插入元素是向线性表中指定位置插入一个元素的操作。

具体步骤如下:(1)判断线性表是否已满,如果已满则无法插入元素。

(2)判断插入位置是否合法,如果不合法则无法插入元素。

(3)将插入位置及其后面的元素都向后移动一个位置。

(4)将待插入的元素放入插入位置。

3·删除元素删除元素是从线性表中删除指定位置的元素的操作。

具体步骤如下:(1)判断线性表是否为空,如果为空则无法删除元素。

(2)判断删除位置是否合法,如果不合法则无法删除元素。

(3)将删除位置后面的元素都向前移动一个位置。

(4)删除最后一个元素。

4·查找元素查找元素是在线性表中查找指定元素值的操作。

具体步骤如下:(1)从线性表的第一个元素开始,逐个比较每个元素的值,直到找到目标元素或遍历完整个线性表。

(2)如果找到目标元素,则返回该元素的位置。

(3)如果未找到目标元素,则返回找不到的信息。

四、实验步骤1·初始化线性表(1)定义线性表的数据结构,包括表头指针和数据元素的存储空间。

(2)将表头指针指向一个空的数据元素。

2·插入元素(1)判断线性表是否已满。

数据结构线性表实验报告

数据结构线性表实验报告

数据结构线性表实验报告数据结构线性表实验报告实验目的:本次实验主要是为了学习和掌握线性表的基本操作和实现方式。

通过实验,我们可以加深对线性表的理解,并能够熟悉线性表的基本操作。

实验设备与环境:本次实验所需的设备包括计算机和编程环境。

我们选择使用C语言来实现线性表的操作,并在Visual Studio Code编程软件中进行编写和调试。

实验内容:1.线性表的定义和基本操作1.1 线性表的定义:线性表是一种有序的数据结构,其中的元素按照一定的顺序存储,可以插入、删除和访问元素。

1.2 线性表的基本操作:1.2.1 初始化线性表:创建一个空的线性表。

1.2.2 判断线性表是否为空:判断线性表是否不含有任何元素。

1.2.3 获取线性表的长度:返回线性表中元素的个数。

1.2.4 在线性表的指定位置插入元素:在线性表的第i个位置插入元素x,原第i个及其之后的元素依次后移。

1.2.5 删除线性表中指定位置的元素:删除线性表中第i个位置的元素,原第i+1个及其之后的元素依次前移。

1.2.6 获取线性表中指定位置的元素:返回线性表中第i个位置的元素的值。

1.2.7 清空线性表:将线性表中的元素全部删除,使其变为空表。

2.线性表的顺序存储结构实现2.1 线性表的顺序存储结构:使用数组来实现线性表的存储方式。

2.2 线性表的顺序存储结构的基本操作:2.2.1 初始化线性表:创建一个指定长度的数组,并将数组中的每个元素初始化为空值。

2.2.2 判断线性表是否为空:判断线性表的长度是否为0。

2.2.3 获取线性表的长度:返回线性表数组的长度。

2.2.4 在线性表的指定位置插入元素:将要插入的元素放入指定位置,并将原位置及其之后的元素依次后移。

2.2.5 删除线性表中指定位置的元素:将指定位置的元素删除,并将原位置之后的元素依次前移。

2.2.6 获取线性表中指定位置的元素:返回指定位置的元素的值。

2.2.7 清空线性表:将线性表数组中的每个元素赋空值。

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

实验一 线性表的基本操作及其应用
一、实验目的
1、帮助读者复习C++语言程序设计中的知识。

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

3、熟悉线性表的基本运算在两种存储结构上的实现。

4、掌握顺序表的存储结构形式及其描述和基本运算的实现。

5、熟练掌握动态链表结构及有关算法的设计
二、实验内容
求两个多项式的相加运算
[问题描述]
用单链表存储一元多项式,并实现两个多项式的相加运算。

[基本要求]
(1)本程序需要基于线性表的基本操作来实现一元多项式的加法,也可以用数组实现。


(2)两个多项式都有键盘输入相应的系数和指数
[测试数据] 由学生任意指定。

三、源代码
#include <stdio.h>
#include <malloc.h>
#define MAX 20 //多项式最多项数
typedef struct //定义存放多项式的数组类型
{
double coef; //系数
int exp; //指数
} PolyArray[MAX];
typedef struct pnode //定义单链表结点类型
{
double coef; //系数
int exp; //指数
struct pnode *next;
} PolyNode;
void DispPoly(PolyNode *L) //输出多项式
{
bool first=true; //first为true表示是第一项
PolyNode *p=L->next;
while (p!=NULL)
{
if (first)
first=false;
else if (p->coef>0)
printf("+");
if (p->exp==0)
printf("%g",p->coef);
else if (p->exp==1)
printf("%gx",p->coef);
else
printf("%gx^%d",p->coef,p->exp);
p=p->next;
}
printf("\n");
}
void DestroyList(PolyNode *&L) //销毁单链表
{
PolyNode *p=L,*q=p->next;
while (q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
void CreateListR(PolyNode *&L,PolyArray a,int n) //尾插法建表{
PolyNode *s,*r;int i;
L=(PolyNode *)malloc(sizeof(PolyNode)); //创建头结点
L->next=NULL;
r=L; //r始终指向终端结点,开始时指向头结点
for (i=0;i<n;i++)
{
s=(PolyNode *)malloc(sizeof(PolyNode));//创建新结点
s->coef=a[i].coef;
s->exp=a[i].exp;
r->next=s; //将*s插入*r之后
r=s;
}
r->next=NULL; //终端结点next域置为NULL
}
void Sort(PolyNode *&head) //按exp域递减排序
{
PolyNode *p=head->next,*q,*r;
if (p!=NULL) //若原单链表中有一个或以上的数据结点
{
r=p->next; //r保存*p结点后继结点的指针 p->next=NULL; //构造只含一个数据结点的有序表 p=r;
while (p!=NULL)
{
r=p->next; //r保存*p结点后继结点的指针 q=head;
while (q->next!=NULL && q->next->exp>p->exp)
q=q->next; //在有序表中找插入*p的前驱结点*q
p->next=q->next; //将*p插入到*q之后
q->next=p;
p=r;
}
}
}
void Add(PolyNode *ha,PolyNode *hb,PolyNode *&hc) //求两有序
集合的并
{
PolyNode *pa=ha->next,*pb=hb->next,*s,*tc;
double c;
hc=(PolyNode *)malloc(sizeof(PolyNode)); //创建头结点
tc=hc;
while (pa!=NULL && pb!=NULL)
{
if (pa->exp>pb->exp)
{
s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点
s->exp=pa->exp;s->coef=pa->coef;
tc->next=s;tc=s;
pa=pa->next;
}
else if (pa->exp<pb->exp)
{
s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点
s->exp=pb->exp;s->coef=pb->coef;
tc->next=s;tc=s;
pb=pb->next;
}
else //pa->exp=pb->exp
{
c=pa->coef+pb->coef;
if (c!=0) //系数之和不为0时创建新结点
{
s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点
s->exp=pa->exp;s->coef=c;
tc->next=s;tc=s;
}
pa=pa->next;
pb=pb->next;
}
}
if (pb!=NULL) pa=pb; //复制余下的结点
while (pa!=NULL)
{
s=(PolyNode *)malloc(sizeof(PolyNode)); //复制结点 s->exp=pa->exp;s->coef=pa->coef;
tc->next=s;tc=s;
pa=pa->next;
}
tc->next=NULL;
}
void main()
{
PolyNode *ha,*hb,*hc;
PolyArray a={{2.3,0},{-2.8,2},{5.6,3},{-10.9,7},{7.6,10}};
PolyArray b={{-1.2,0},{8.6,1},{-13.9,3},{15.5,5},{5.6,9}};
CreateListR(ha,a,5);
CreateListR(hb,b,5);
printf("原多项式A: ");DispPoly(ha);
printf("原多项式B: ");DispPoly(hb);
Sort(ha);
Sort(hb);
printf("有序多项式A: ");DispPoly(ha);
printf("有序多项式B: ");DispPoly(hb);
Add(ha,hb,hc);
printf("多项式相加: ");DispPoly(hc);
DestroyList(ha);
DestroyList(hb);
DestroyList(hc);
}
四、测试结果
五、心得体会
两个简单的的多项式用相加,编程却需要线性表各种用法显得很复杂。

所以需要我们要掌握许多计算机语言知识来解决复杂的问题。

相关文档
最新文档