手机版

东华大学数据结构上机实验报告

时间:2025-07-07   来源:未知    
字号:

东华大学信息科学与技术学院

实验报告

实验名称: 线性表的基本操作 指导教师:

学生姓名: 学生学号: 实验日期: 2012/11

一、 实验目的

1、 熟悉C或VC++语言上机环境。

2、 会定义线性表的顺序存储结构和链式存储结构。 3、 熟悉顺序表和单链表的一些基本操作和应用。

4、 加深对线性表的理解,逐步培养解决实际问题的编程能力。 二、 实验环境

运行C或VC++的微机。

三、 实验内容:分别使用顺序表和单链表存储结构实现以下操作: 1. 建立线性表L={12,13,21,24,28,31,42,77}; 2. 在第5个元素之前插入26; 3. 删除第5个元素28;

4.

查找28。

四、 实验设计思路及算法流程

(一) 使用顺序表实现操作:

建立顺序表,完成顺序表的基本操作:初始化、插入、删除、输出、查找元素、判线

性表是否为空;

问题分析:利用顺序表,设计一组输入数据,能够对顺序表进行如下操作: 创建一个新的顺序表,实现动态空间分配的初始化;

已给定的值插入到指定位置和删除指定位置的值,形成有序顺序表;

按值查找,根据给定数据元素的值,查找该元素的位置,对查找结果进行返回;

实现顺序表的各个元素的输出;

“初始化算法”的操作结果:构造一个空的顺序线性表,对顺序表的空间进行动态管理,实现动态分配、回收和增加存储空间;

“位置插入算法” 的初始条件:顺序线性表L已存在,给定的元素位置为i,且1≤i≤ListLength(L)+1 ;其操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1;

“位置删除算法”的初始条件:顺序线性表L已存在,1≤i≤ListLength(L) ;其操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 ;

“输出算法”的初始条件:顺序线性表L已存在;其操作结果:依次对L的每个数据元素进行输出;

“按值查找算法”初始条件:顺序线性表L已存在,元素值为e;其操作结果:返回L中数据元素值为e的元素位置;

线性表的顺序存储结构的定义及其基本操作的参考程序(顺序表)

文件一:pubuse. h 是公共使用的常量定义和系统函数调用声明。 /* 公共使用的常量定义和系统函数调用声明*/ /* (程序名) */ #include<iostream>

using namespace std;

/* 函数结果状态代码 */

#define TRUE 1 //宏定义

#define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int ElemType; //类型定义

文件二:seqlistdef.h 进行线性表的动态分配顺序存储结构的表示。 /* 线性表的动态分配顺序存储结构 */

#define LISTINCREMENT 20 /* 线性表存储空间的分配增量 */ #define LIST_INIT_SIZE 30 /* 线性表存储空间的初始分配量 */ typedef struct { ElemType *elem; /* 存储空间基址 */ int length; /* 当前长度 */

int listsize; /* 当前分配的存储容量(以sizeof(ElemType)为单位) */

}SqList;

文件三:seqlistalgo. h 进行线性表顺序存储结构的基本实验算法定义。 /* 顺序表示的线性表的基本操作 */

Status InitList_Sq(SqList &L) /* 思路类似于算法2.3 */ { /* 操作结果:构造一个空的顺序线性表 */ L.elem=new ElemType[LIST_INIT_SIZE]; // if(!L.elem)

exit(OVERFLOW); /* 存储分配失败 */

L.length =0; /* 空表长度为0 */

L.listsize=LIST_INIT_SIZE; /* 初始存储容量 */ return OK;

}

Status ListInsert(SqList &L,int i,ElemType e) /* 思路类似于算法2.4 */ { /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 */

/* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */ int *q,*p;ElemType *newbase; //?

if(i<1 || i>L.length+1) return ERROR; /* i值不合法 */ if(L.length>=L.listsize) /* 当前存储空间已满,增加分配 */ { newbase=new ElemType[L.listsize+LISTINCREMENT]; if(!newbase)

exit(OVERFLOW); /* 存储分配失败 */

L.elem=newbase; /* 新基址 */

L.listsize+=LISTINCREMENT; /* 增加存储容量 */ }

q=&(L.elem[i-1]); /* q为插入位置 */

for (p=&(L.elem[L.length-1]);p>=q;--p) /* 插入位置及之后的元素右移 */

*(p+1)=*p;

*q=e; /* 插入e */ ++L.length; /* 表长增1 */ return OK;

}

Status Look(SqList &L,ElemType e) /* 思路类似于算法2.4 */ {/* 初始条件:顺序线性表L已存在 */

/* 操作结果:返回L中第1个与e满足相等关系的数据元素的位序。 */ /* 若这样的数据元素不存在,则返回值为0*/

int *p=L.elem,*q=L.elem+L.length-1; /* p的初值为第1个元素的存储位置 */

int i=1; /* i的初值为第1个元素的位序 */ //记录此时元素在线性表中的次序

for(;p<=q;++p) {

if(*p==e)

cout<<"该元素在线性表中的位序为:"<<i<<" "; 返回元素在线性表中的次序 ++i;

}

return OK;

}

Status ListDelete_Sq(SqList &L,int i,ElemType &e) /* 思路类似于算法2.5 */ { /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */

/* 操作结果:删除L的 …… 此处隐藏:5173字,全部文档内容请下载后查看。喜欢就下载吧 ……

东华大学数据结构上机实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)