ImageVerifierCode 换一换
格式:DOCX , 页数:89 ,大小:1.15MB ,
资源ID:9536358      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9536358.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验报告.docx

1、数据结构实验报告数据结构实验所属学院及班级:信息工程学院计算机科学与技术091班学生姓名:学生学号:时间: 2010-3 至 2010-6实验1:C 语言基础练习姓名: 学号: 专业班级:计算机科学与技术091班 一、实验目的对C语言的复习,增强学生对结构体数组和指针的学习,尤以结构体的应用和指针的操作作为重点。二、问题描述1、 构造一个学生结构体数组,成员包括学号,姓名,四门成绩,以及平均成绩;2、 从键盘上输入学生的学号,姓名和四门成绩;3、 找出学生中考试没有通过的学生姓名并输出;找出考试在90分以上的学生并输出。三、实验要求1、 要求用链表存储学生的记录,并设计出输入和查找的基本操作算

2、法。2、 在实验过程中,分析算法的时间复杂度和空间复杂度进行分析。四、实验环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、算法分析创建一个学生结构体数组,其中包括指向下一个学生的指针。用链表存储学生的记录,指针指向学生结构体数组的成员,输入数据存放在相应位置。用p=p-next实现链表的滑动,查找链表上的相关信息。六、实验内容和过程1、 用所选择的语言实现算法;【程序清单】#include#include#define LEN sizeof(struct stu) /宏定义结构体的长度为LEN#define NULL 0

3、struct stu /定义一个学生结构体数组long int num; /学生学号char name20; /学生姓名float score4; /记录学生四门成绩的数组float averSocre; /平均成绩struct stu *next; /指向下一个学生的指针;float aver(struct stu st) /计算平均成绩的函数float sum=0;int i;for(i=0;inum);if(p1-num=0)return(head);printf(输入学生姓名:);scanf(%s,&p1-name);printf(输入学生成绩一:);scanf(%f,&p1-scor

4、e0);printf(输入学生成绩二:);scanf(%f,&p1-score1);printf(输入学生成绩三:);scanf(%f,&p1-score2);printf(输入学生成绩四:);scanf(%f,&p1-score3);printf(*n);p1-averSocre=aver(*p1);head=NULL;while(p1-num)n=n+1;if(n=1)head=p1;elsep2-next=p1 ; /将p1所指内容赋给p2p2=p1;p1=(struct stu*)malloc(LEN); /继续输入学生的成员值printf(*n);printf(输入学生学号:);sc

5、anf(%d,&p1-num);if(p1-num=0)break; /如果输入的学生的学号为,则结束输入,跳出循环体printf(输入学生姓名:);scanf(%s,&p1-name);printf(输入学生成绩一:);scanf(%f,&p1-score0);printf(输入学生成绩二:);scanf(%f,&p1-score1);printf(输入学生成绩三:);scanf(%f,&p1-score2);printf(输入学生成绩四:);scanf(%f,&p1-score3);printf(*n);p1-averSocre=aver(*p1);p2-next=NULL; /链表表尾指

6、空return(head);void main()void pass(struct stu *p4);struct stu *p3;p3=creat(); /创建学生结构体pass(p3); /成绩优秀及不及格的学生并输出学生相关信息getchar(); /等待输入,便于查看输出结果getchar();void pass(struct stu*p4) /选择成绩优秀及不及格的学生并输出学生相关信息int i;printf(*n);while(p4!=NULL)for(i=0;iscoreiname,p4-num,p4-score0,p4-score1,p4-score2,p4-score3,p

7、4-averSocre);break;else if(p4-scorei=90)printf(%s 【优秀】n学号: %ldn成绩分别为:%f,%f,%f,%fn平均分:%fn,p4-name,p4-num,p4-score0,p4-score1,p4-score2,p4-score3,p4-averSocre);break;p4=p4-next;printf(*n);2、 测试程序,并对算法进行时间和空间复杂度分析。七、实验结果八、总结和感想对C 语言基础练习的实验并不是老师要求做的实验,但我还是认真的做了,因为我觉得需要复习一下之前学过的C语言内容。因为我们用的教材是C+版的数据结构,与C

8、语言版的数据结构在描述一种数据结构上还是有区别的,C语言是用结构体而C+是用类。通过本次实验对结构体的知识做了一定的复习和了解,也复习了课本上的知识。一开始看到实验题目就想用以前学过的知识直接编程出来,但是才发现是要用链表来存储,这与数组存储相比还是比较困难的,查阅了很多资料终于做出来了,我觉得对我接下来的实验来说是次很好的基础。实验2:线性表及其应用姓名: 学号: 专业班级:计算机科学与技术091班 一、实验目的帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。二、问题描述1. 构造一个空的线性表L。2. 在线性表L的第i个元素之前插入新的元素e;

9、3. 在线性表L中删除第i个元素,并用e返回其值。三、实验要求1、 分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线性表的基本操作算法。2、 在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行分析。四、实验环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、算法分析【顺序存储的核心算法描述】插入:顺序表的插入操作是指在线性表的第i-1个数据元素和第i个数据元素之间插入一个新的数据元素,使长度为n的线性表变成长度为n+1的线性表,数据元素ai-1和ai之间的逻辑关系发生了变化 。因

10、此,除非i=n+1,否则必须移动元素才能反映这个逻辑上的变化。一般情况下,在第i(1in)个元素之前插入一个元素时,需将第n至第i(共n-i+1)个元素向后移动一个位置。删除:顺序表的删除操作是使长度为n的线性表变成长度为n1的线性表,数据元素ai-1、ai和ai+1之间的逻辑关系发生了变化 。一般情况下,删除第i(1in)个元素时需将第i+1至第n(共n- 1)个元素向前移动一个位置。【链式存储的核心算法描述】插入:链表的插入操作是将值为x的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。具体步骤:(1)找到ai-1存储位置p(2)生成一个数据域为x的新结点*s(3)令结点*

11、p的指针域指向新结点(4)新结点的指针域指向结点ai。删除:链表的删除操作是将表的第i个结点删去。具体步骤:(1)找到ai-1的存储位置p(因为在单链表中结点ai的存储地址是在其直接前趋结点ai-1的指针域next中。(2)令p-next指向ai的直接后继结点(即把ai从链上摘下)(3)释放结点ai的空间。六、实验内容和过程我选择的是C语言来设计实现线性表的顺序和链表存储结构,并在这两种存储结构下实现线性表的插入、删除算法。顺序表和链表的程序代码清单如下:【顺序表程序清单】#include#include#define ElemType char#define LIST_INIT_SIZE 1

12、00#define LISTINCREMENT 10#define OVERFLOW 0#define OK 1typedef struct ElemType *elem; /顺序表中的元素指针 int length; /顺序表的长度 int listsize; /顺序表的大小SqList;/顺序表的初始化功能int InitList(SqList &L) L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) return OVERFLOW; L.length=0; L.listsize=LIST_INIT

13、_SIZE; return OK; /顺序表的插入操作int ListInsert(SqList &L,int i,ElemType e) if(iL.length+1) return 0; /如果越界 则返回0 if(L.length=L.listsize) ElemType *newbase; newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType); if(!newbase) return OVERFLOW; L.elem=newbase; L.listsize += LISTINC

14、REMENT; ElemType *q; ElemType *p; q=L.elem+i-1; for(p=L.elem+L.length-1;p=q;-p) *(p+1)=*p; *q=e; +L.length; return OK;/删除第i个结点并返回e值 int ListDelete(SqList &L,int i,ElemType &e) if(iL.length) return 0; ElemType *p; ElemType *q; p=&(L.elemi-1); e=*p; q=L.elem+L.length-1; for(+p;p=q;+p) *(p-1)=*p; -L.le

15、ngth; return OK;/输出顺序表的函数void Print(SqList &L) printf(n*n); printf( 当前顺序表为:n); printf( ); for(int i=0;iL.length;i+) printf(%1c,L.elemi); printf(n);/顺序表的输入函数void Input(SqList &L) int n; ElemType e; InitList(L); printf(n*n); printf( 请输入顺序表中元素的个数:); scanf(%d,&n);fflush(stdin); /清空缓冲区 printf(n 请输入顺序表中的元

16、素:); for(int i=0;in;i+) scanf(%c,&e); ListInsert(L,i+1,e); Print(L);/顺序表插入操作的测试函数void insert() SqList L; int i; ElemType e; Input(L); printf(n*n); printf( 请输入要插入的元素的位置:); scanf(%d,&i);fflush(stdin); printf(n); printf( 请输入要插入的元素:); scanf(%c,&e);fflush(stdin); ListInsert(L,i,e); Print(L);/顺序表删除操作的测试函数

17、void deletei() SqList L; int i; ElemType e; Input(L); printf(*n); printf( 请输入要删除的元素的位置:); scanf(%d,&i);fflush(stdin); /清空缓冲区 ListDelete(L,i,e); Print(L);void main() SqList L; int choose,flag; flag=1; while(flag) printf(* 顺序表操作 *n); printf( 1.在第i个元素之前插入一个元素n); printf( 2.删除第i个元素n); printf( 其他.结束); pri

18、ntf(n*n); printf( ); scanf(%d,&choose); switch(choose) case 1: insert(); break; case 2: deletei(); break; default: flag=0; break; getchar(); 【链表程序清单】/链表的初始化、插入、删除算法#include#include#include#define ElemType char#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OVERFLOW 0#define OK 1typedef str

19、uct LnodeElemType data;struct Lnode * next;Lnode, * Linklist; /头指针/链表初始化int InitLinklist(Linklist &L) L=(Linklist)malloc(sizeof(Lnode); if(!L) return OVERFLOW; L-next=NULL;/定义指针域为空 return OK;int getlength(Linklist &L) /获得链表中的结点数 int i=0; if(!L) return 0; Linklist p=L-next; while(p!=NULL) +i; p=p-nex

20、t; return i+1;/向链表中插入元素int ListInsert(Linklist & L, int i, ElemType e) /在带头节点的单链表L中第i个位置之前插入元素e Linklist p=L; int j=1; if(idata=e; if(i=1)/插入L中 s-next=L; L=s; else while(p&jnext; if(!p) return 0; s-next=p-next; p-next=s; return OK;/向链表中删除元素int ListDelete(Linklist &L,int i) /在带头结点的单链表L中删除第i个数据元素元素 Li

21、nklist p; p=L; int j=1; if(!L) return 0; else if(i=1) L=p-next; free(p); else while(p-next&jnext; j+; if(!(p-next)|ji-1) /删除位置不合理 return 0;/删除并释放结点 Linklist q=p-next; p-next=q-next;/即使是删除最后一个元素,空指针也能继承 free(q); return 1;/显示链表的函数void Print(Linklist &L) Linklist p; p=L; printf(*n); printf( 当前链表为:n); p

22、rintf( ); int m=getlength(L); for(int i=0;idata ,p-data); p=p-next; printf(n);/输入链表的函数void Input(Linklist &L) int n; ElemType e; InitLinklist(L); printf(*n); printf( 请输入链表中结点的个数:); scanf(%d,&n);fflush(stdin); /用于清空缓冲区 printf(n 请输入链表的结点:); for(int i=0;in;i+) /e=getchar(); scanf(%c,&e); ListInsert(L,i

23、+1,e); Print(L);/插入的测试函数void insert() Linklist L; int i,n; ElemType e; Input(L); printf(*n); printf( 请输入要插入的元素的位置:); scanf(%d,&i);fflush(stdin); /用于清空缓冲区 printf(n); printf( 请输入要插入的元素:); /e=getchar(); scanf(%c,&e); ListInsert(L,i,e); Print(L);/删除的测试函数void deletei() Linklist L; int i; ElemType e; Input(L); printf(*n); printf( 请输入要删除的元素的位置:); scanf(%d,&i);fflush(stdin); /printf(n请输入要删除的元素:); /scanf(%d,&e); ListDelete(L,i); Print(L);void main() Linklist L; int i; ElemType e; in

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1