数据结构线性表的顺序表示和实现的实习报告(共17页).doc
《数据结构线性表的顺序表示和实现的实习报告(共17页).doc》由会员分享,可在线阅读,更多相关《数据结构线性表的顺序表示和实现的实习报告(共17页).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数学与计算科学学院实 验 报 告实验项目名称 线性表的顺序表示与实现所属课程名称 数据结构 实 验 类 型 验证型 实 验 日 期 班 级 学 号 姓 名 成 绩 一、 实验概述:【实验目的】1 线性表的逻辑结构特征1.1 以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。 1.2 有且仅有一个开始结点,没有直接前驱,且仅有一个直接后继;有且仅有一个终结结点,没有直接后继,且仅有一个直接前驱。1.3 其余内部结点都有且仅有一个直接前驱和一个直接后继。2 掌握线性表的基本操作在顺序存储结构上的实现。【实验原理】1 顺序表的特点 1.1 逻辑位置上相邻
2、和物理位置上相邻1.2 是一种随机存储结构,其存储位置可以用一简单直观的公式表示2 顺序表的类C语言表示:#define LIST_INIT_SIZE 9 /线性表存储空间的初始分配量#define LISTINCREMENT 2 /线性表存储空间的分配增量typedef struct ElemType * elem;/存储空间基址 int length;/当前长度 int listsize;/当前分配的存储容量(以sizeof(ElemType)为单位)SqList;【实验环境】VC+6.0二、【实验内容】【实验方案】编写主函数,调用顺序表的初始化建空表,插入和删除算法,调试运行得出结果【实
3、验过程】(实验步骤、记录、数据、分析)8. 先将线性表的动态分配顺序存储结构,算法与主函数编入VC+6.0中typedef struct ElemType * elem; int length; int listsize;SqList;Status InitList_Sq(SqList &L) L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK;Status ListInsert
4、_Sq(SqList &L,int i,ElemType e) if (iL.length+1) return ERROR; if(L.length=L.listsize) newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (ElemType); if(! newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q=&(L.elemi-1); for(p=&(L.elemL.length-1);p=q;- -p)*(p+1)=*p
5、; *q=e; +L.length; return OK;Status ListDelect_Sq(SqList &L,int i,ElemType &e) if(iL.length) return ERROR;p=&(L.elemi-1);e=*p; q=L.elem+L.length-1; for(+p;p=q;+p) *(p-1)=*p; -L.length; return OK;void main() SqList L; int i; InitList_Sq(L);for(i=0;iLIST_INIT_SIZE;i+) scanf(%d,&L.elemi); L.length+; fo
6、r(i=0;iL.length;i+) printf(%d ,L.elemi); printf(n); ElemType e; scanf(%d%d,&i,&e); ListInsert_Sq(L,i,e); for(i=0;iL.length;i+) printf(%d ,L.elemi); printf(n); scanf(%d,&i); ListDelect_Sq(L,i,e); for(i=0;iL.length;i+) printf(%d ,L.elemi); printf(n);2.调试第一次出现的错误:原因:由于许多变量未定义,以及没有头文件与宏定义所以错误许多,还有更多错误没有
7、显示出来3.将以下语句编入程序中:#include stdio.h#include stdlib.h#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 9 #define LISTINCREMENT 2typedef int ElemType; typedef int Status;4.调试第二次出现以下错误:原因:是在每个算法中有许多变量未定义,导致许多错误5.再将语句: int *newbase; int
8、*q; int *p;写入插入算法中;将语句: int *p; int *q;写入删除算法中;6.调试第三次显示没有错误:7.运行第一次显示结果为:8. 但运行后的界面显得很单调;要是忘记下一个算法是什么就容易输入出错,也不适合大众使用;因此为了将程序优化,所以在主函数中增加以下输入输出语句和条件语句;为了让程序更加严谨,因此还加入一些循环语句。int i,p,q;p=2,q=2;printf(请输入您想构建的顺序表(元素为%d个):n,LIST_INIT_SIZE);printf(您构建的顺序表是:n);printf(请输入您想在第几个元素位置前插入元素:n,LIST_INIT_SIZE);
9、while(iL.length)&p=0)printf(输入的数字错误,(只剩下%d次重新输入符合要求的数字的机会)n,p);-p;if(p0)printf(原因:您输入数字错误过多,程序终止运行n);return ERROR;scanf(%d,&i);printf(请输入您想插入的数:n);printf(形成的新顺序表为:n);printf(请输入您想删除的是第几个元素:n);while(iL.length)&q=0)printf(输入的数字错误,(只剩下%d次重新输入符合要求的数字的机会)n,q);-q;if(q0)printf(原因:您输入数字错误过多,程序终止运行n);return E
10、RROR;printf(删除的数为:n);printf(%dn,e);printf(形成的新顺序表为:n);将语句scanf(%d%d,&i,&e);变为scanf(%d,&i);scanf(%d,&e);9. 那么主函数包含的语句变为:main()SqList L;int i,p,q;p=2,q=2;InitList_Sq(L);printf(请输入您想构建的顺序表(元素为%d个):n,LIST_INIT_SIZE);for(i=0;iLIST_INIT_SIZE;i+) scanf(%d,&L.elemi); L.length+;printf(您构建的顺序表是:n);for(i=0;iL.
11、length;i+) printf(%d ,L.elemi); printf(n); ElemType e;printf(请输入您想在第几个元素位置前插入元素:n); scanf(%d,&i);while(iL.length)&p=0)printf(输入的数字错误,(只剩下%d次重新输入符合要求的数字的机会)n,p);-p;if(p0)printf(原因:您输入数字错误过多,程序终止运行n);return ERROR;scanf(%d,&i);printf(请输入您想插入的数:n);scanf(%d,&e);ListInsert_Sq(L,i,e);printf(形成的新顺序表为:n);for
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 顺序 表示 实现 实习 报告 17
限制150内