- 4
- 0
- 约9.69千字
- 约 9页
- 2020-07-09 发布于天津
- 举报
实用标准文案
计算机系数据结构实验报告( 1)
实验目的:
帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的
操作和应用作为重点。
问题描述:
1、 构造一个空的线性表 L 。
2、 在线性表 L 的第 i 个元素之前插入新的元素 e;
3、 在线性表 L 中删除第 i 个元素,并用 e 返回其值。
实验要求: 文法是一个四元
1、 分别利用顺序和链表存储结构实现线性表的存储, 并设计出在不同的存储结构中线
性表的基本操作算法。
2、 在实验过程中, 对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行
分析。
算法分析:
由于两种存储结构都用来创建线性结构的数据表, 可采用相同的输出模式和整体结构类似的
算法,如下:
实验内容和过程:
顺序存储结构线性表程序清单:
// 顺序存储结构线性表的插入删除
#include iostream
精彩文档
实用标准文案
#include stdlib.h
using namespace std;
# define LISTSIZE 100
# define CREMENTSIZE 10
typedef char ElemType; // 定义数据元素类型为字符型
typedef struct {
ElemType *elem; // 数据元素首地址
int len; // 当前元素个数
int listsize; // 当前存储最大容量
}SqList;
// 构造一个空的线性表 L
int InitList(SqList L)
{
L.elem=(ElemType *)malloc(LISTSIZE*sizeof(ElemType));
if (!L.elem) exit(-2); // 分配空间失败
L.len=0;
L.listsize=LISTSIZE;
}
// 在顺序线性表 L 中第 i 个位置之前插入新的元素 e
int ListInsert(SqList L,int i,ElemType e)
{
if (i1||iL.len+1) return -1; //i 值不合法
if (L.len=L.listsize)
{
ElemType *newelem=(ElemType
*)realloc(L.elem,(L.listsize+CREMENTSIZE)*sizeof(ElemType));
// 存储空间已满,增加分配
if(!newelem) exit (-2); // 分配失败
L.elem=newelem;
L.listsize+=CREMENTSIZE;
}
ElemType *q=(L.elem[i-1]) ;
for (ElemType *p=(L.elem[L.len-1]);p=q;--p) *(p+1)=*p; // 插入位置及其后
的元素后移
*q=e; ++L.len;
return 1;
}
// 在顺序线性表 L 中删除第 i 个元素,并用
原创力文档

文档评论(0)