数据结构课程设计-顺序表的基本实现和存储结构.doc_第1页
数据结构课程设计-顺序表的基本实现和存储结构.doc_第2页
数据结构课程设计-顺序表的基本实现和存储结构.doc_第3页
数据结构课程设计-顺序表的基本实现和存储结构.doc_第4页
数据结构课程设计-顺序表的基本实现和存储结构.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数 据 结 构 课 程 设 计设计题目: 顺序表的基本实现和存储结构 学生姓名: 专业班级: 10计算机应用(1)班 指导教师: 完成时间: 2011年12月3日 信息工程 院 计算机科学 系安徽新华学院课程设计成绩评定表(专科)课题名称 顺序表基本实现和存储结构院 系信息工程学院年级专业10计应1班成员姓名成员学号承担的任务成 绩刁二亮1032101102 程序编写及文档汇总干敏1032101136 程序编写及文字部分编写顾大胜1032101104 程序编写及文档排版吴晴1032101132 程序编写及概述编写王玮1032101112 程序编写课题设计目的与设计意义1、 课题设计目的:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2、课题设计意义:锻炼我们的编码能力,真正理解数据结构的编码思想,并且锻炼我们的动手能力和成员间的配合,提高程序编写能力。在信息传递时,希望长度能尽可能短,即采用最短码。顺序的应用,就是采用这种有效的数据压缩技术可以节省数据文件的存储空间和计算机网络的传送时间。指导教师:余云2011年 12月 3日目 录一.目的51、设计目的:52、试验目的:6二.实验环境7三.实验学时7四.实验内容7五.需求分析7六.概述81、顺序表的概述:82、.初始化操作:83、.求长度操作:94、.判空操作:95、.清空操作:106、取元素操作:107、按值查找操作:118、插入操作:129、删除操作:13七、实验步骤与源程序14八、程序测试结果18九、顺序表的优点和缺点191、顺序表的优点:202、顺序表的缺点:20十、总结20一.目的1、设计目的:数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。在当今信息时代,信息技术己成为当代知识经济的核心技术。我们时刻都在和数据打交道。比如人们在外出工作时找最短路径,在银行查询存款、通过互联网查新闻、以及远程教育报名等,所有这些都在与数据发生关系。实际上,现实世界中的实体经过抽象以后,就可以成为计算机上所处理的数据。数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:(1)、了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(2)、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)、提高综合运用所学的理论知识和方法独立分析和解决问题的能力;(4)、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2、试验目的: (1)、掌握线性表的顺序存储结构和链式存储结构; (2)、熟练掌握顺序表和链表基本算法的实现; (3)、掌握利用线性表数据结构解决实际问题的方法和基本技巧; (4)、按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果); (5)、按时提交实验报告21二.实验环境计算机、C语言程序设计环境。三.实验学时10学时,必做实验。四.实验内容1、实现顺序表的基本操作,线性表中数据元素类型为 结构体,成员包括学生的姓名、学号、若干课程的成绩(int型),按照顺序存储结构实现如下算法: (1)、创建任意线性表,长度限定在100个学生信息之内; (2)、打印(遍历)该线性表(依次打印出表中元素值); (3)、在线性表中查找第i个元素,并返回其值; (4)、在线性表中第i个元素之前插入一已知元素; (5)、在线性表中删除第i个元素;五.需求分析线性表的顺序存储结构是把线性表中所有数据元素,按照其逻辑顺序一次存储到计算机存储器中从指定位置开始的一块连续的存储空间中,数据元素间的存储(物理)位置即表示了它的逻辑位置。也就是说,逻辑上的第一个元素就存放在指定的第一个位置,逻辑上的第二个元素就存放在指定的空间的第二个元素,.依次类推。设线性表L=(a1,a2,a3,.an),假定L中的每个元素需占用K个存储单元,则在线性表存储结构中,L的第i+1个元素的存储地址Loc(ai+1)和第i个数据元素的存储地址loc(ai)之间满足下列关系: Loc(Ai+1)=Loc(Ai)+k一般地,线性表中第i个数据元素Ai的存储地址为: Loc(Ai)=Loc(Ai)+(i-1)*k (1=n)其中,Loc(Ai)为线性表的第一个元素A1的存储位置,通常又称作线性表的起始地址或基地址,n为线性表的表长。六.概述1、顺序表的概述:通常把使用顺序存储实现的线性表称为顺序表线性表的顺序存储结构是把线性表中所有数据元素,按照其逻辑顺序一次存储到计算机存储器中从指定位置开始的一块连续的存储空间中,数据元素间的存储(物理)位置即表示了它的逻辑位置。2、.初始化操作: 在程序中,使用SqList类型用如下语句定义顺序表L: 此时,L实际上只是一个机构体变量,其有3个分量base、length及listSize,但这 3个分量并没有确切的值,并且base仅为一个指针量,还没有与之对应的顺序表所需的存储空间。因此在使用顺序表L时,首先应对其进行初始化。所以此初始化操作的作用就是从内存中申请一块可共使用顺序表L使用的大小为InitSize的存储空间。并使L成为一个空表(将其长度 赋值为0)顺序表的初始化操作算法见下:void initlist(sqlist *l,int initsize) l-base=(int *)malloc(initsize * sizeof(int);if(l-base=NULL)return -2;l-length=0;l-listsize=initsize;return 1;3、.求长度操作: 顺序表L的length分量的值即为其长度。该操作的实现算法见下:int listlength(sqlist l)return l-length;4、.判空操作:判断顺序表L是否为空即判断其length分量的值是否为0.该操作的实现算法见下:status lengthisempty(sqlist l)if(!l-length)return 1else return 05、.清空操作: 将顺序表L清空,只需将length值为0即可。该操作的实现算法见下:void clearlist(sqlist &l)l-length=0;6、取元素操作:当顺序表L非空时,数组下标为i-1的元素即为其第i个元素。该操作算法见下:status getelem(sqlist l,int i,lelemtype &e)if(!l-length)return 0;e=l-basei-1;return 1;7、按值查找操作:该操作用来在顺序表L中查找死一个与给定的数据元素e值相等的元素,并返回其位序。所以可从L中的第一个元素(下标为0的元素)开始一次与e进行比较,若某个元素与e相等则返回其位序(下标加1)。若未找到与e相等的元素,因为顺序表中位序最小为1因此可返回0表示查找失败。顺序表的按值查找操作算法见下:int locateelem(sqlist l,lelemtype e)int i=0;while(ilength & *(l-base+i)!=e)i+;if(ilength)return i+1;else return 0;8、插入操作:在线性表L的第i个位置插入一个新的元素e,则原来的第i个元素变为第i+1个,原来的第i+1个元素就变为第i+2依次类推。该操作算法见下:void insertlist(sqlist *l,int i,int e)lelemtype *newbase; int j;if(i1 | ilength+1)printf(不合理);return 0;if(l-length=l-listsize)printf(满表);return 0;for(j=l-length-1;j=i-1;j-)l-basej+1=l-basej;l-basei-1=e;l-length+;return 1; 9、删除操作:该操作作用于删除顺序表L的第i(0i=ListLength(L))个数据元素并用e返回其值.时原来的长度为n的顺序表变成长度为n-1.该操作算法见下:void deletelist(sqlist *l,int i) int j;if(il-length-1)printf(不合理);return 0;if(l-length=0)printf(空表);return 0;for(j=1;jbasej=l-basej+1;l-length-;return 1;七、实验步骤与源程序#include #define listspaceincr 10typedef structint *base;int length;int listsize;sqlist;void initlist(sqlist *l,int initsize) l-base=(sqlist*)malloc(sizeof(sqlist);if(!l-base)return;l-length=0;l-listsize=initsize;void creatlist(sqlist *l)int i;for(i=0;ilength;i+)scanf(%d,&l-basei);void print(sqlist *l) int i;for(i=0;ilength;i+)printf(%6d,l-basei);void insertlist(sqlist *l,int i,int e)int *newbase;int j;if(il-length+1)return 0;if(l-length=l-listsize)newbase=(int*)realloc(l-base,(l-listsize+listspaceincr) *sizeof(int);if(!newbase)return -2;l-base=newbase;l-listsize+=listspaceincr;for(j=l-length-1;j=i-1;j-)l-basej+1=l-basej;l-basei-1=e;l-length+;return 1;void deletelist(sqlist *l,int i)int j;if(il-length)return 0;for(j=i;jlength;j+)l-basej-1=l-basej;l-length-;return 1; void main()int flag=1,a,i,e,n,j;sqlist l;while(flag)printf(ntt1:初始化ntt2:建立顺序表ntt3:输出顺序表ntt4:在顺序表中插入元素ntt5:在顺序表中删除元素ntt:其他退出n);printf(ntt请选择:);scanf(%d,&a);switch(a) case 1: printf(n请输入初始化空间的大小:); scanf(%d,&n); initlist(&l,n); break; case 2: printf(n请输入顺序表的元素个数:); scanf(%d,&l.length); creatlist(&l); break; case 3:print(&l); break; case 4:printf(n请输入插入的位置与插入的元素:); scanf(%d%d,&i,&e); insertlist(&l,i,e); break; case 5:printf(n请输入删除的位置:); scanf(%d,&j); deletelist(&l,j); break; default :flag=0;八、程序测试结果选择“从文件读取信息”,程序将从文件读取信息,如果读取失败(不存在该信息文件),则结束,如果读取成功,则输出读取成功的提示信息, 九、顺序表的优点和缺点1、顺序表的优点:(1)、实现方法简单,各种高级语言中都有数组,容易实现;(2)、访问元素的速度快,因为在顺序表中逻辑张相邻的两个元素在存储位置上也必定相邻,所以只要知道了第一个元素的地址,其他任何一个元素的地址都可以通过简单的计算求的,故可实现随即存取,即顺序表L的第i个元素即为L.basei-1.2、顺序表的缺点:(1)、需占用连续的空间.存储要求高,不能利用小块存储区;(2)、由于在顺序表中逻辑上相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论