工学院 数据结构实验报告
更新时间:2024-06-26 12:33:01 阅读量: 综合文库 文档下载
- 工学院推荐度:
- 相关推荐
数据结构实验报告
湖南师范大学工程与设计学院
数据结构实验报告
姓 名:钟智君 年 级:2013
专 业:计算机科学与技术 学 号:2013180502 任课教师:肖柳明
开课时间:2014~2015学年第一学期
- 1 -
数据结构实验报告
实验(一) 实验时间 2014年11月14日下午1:00—4:00 实验地点 工程与设计学院前栋403 实验题目 线性表的存储及操作 实验目的 1) 掌握顺序存储结构和链式存储结构的特点; 2) 掌握常见算法。 已知两个按元素值有序的线性表A和B,编程实现:将A和B有序归并成一个按元素值有序的线性表。 实验内容 - 2 -
数据结构实验报告
一、算法基本思想:
1) 从键盘输入两个按元素值有序的线性表A和B的值;
2) 根据输入把数据元素分别以顺序存储结构和线性链表存储; 3) 有序归并成一个新的按元素值有序的线性表C; 4) 输出显示合并后的线性表C。 测试数据:A=(3,5,8,11),B=(2,6,8,9,11,15,20) 二、
顺序存储结构: typedef struct{ int elem[100]; int length; int listsize; }SqList; t
链式存储结构:
typedef struct LNode{ int data;
struct LNode *next; }LNode,*LinkList; int create_sq(SqList &a,int n){} int displaya(SqList &a){}
结构定义:
int create_List(LinkList &b,int n){} int displayb(LinkList b){}
void getList_Sq(SqList a,LinkList b,LinkList c){} void getList_Sq1(SqList a,LinkList b,SqList &c){} int display(SqList c){} int displayc(LinkList b){}
- 3 -
数据结构实验报告
int main(int argc, char *argv[]){} 三、
算法描述:
设两个指针分别指向LA表和LB表中某个元素,若设i当前所指元素为a,j当前所指元素为b,则插入LC中元素c=min(a,b)。i和j的初值都为1,在所指元素插入LC后,在LA和LB中顺序后移。
创建顺序表:
int create_sq(SqList &a,int n) {
int num; int i=0;
while(i cin>>num; a.elem[i]=num; a.length=i++; } return 1; } 创建链表 int create_List(LinkList &b,int n) { LNode *q=b; q->next=NULL; LNode *p; for(int i=n;i>0;--i) { int num; p=(LinkList)malloc(sizeof(LNode)); - 4 - 数据结构实验报告 cin>>num; p->data=num; p->next=NULL; q->next=p; q=q->next; } } 有序归并两个表: 顺序存储 void getList_Sq1(SqList a,LinkList b,SqList &c) { int k=0,i=0; while(b!=NULL||kb->data) { c.elem[i++]=b->data; c.length=i-1; b=b->next; } else { c.elem[i++]=a.elem[k++]; c.length=i-1; } while(b!=NULL) {c.elem[i++]=b->data; b=b->next; c.length=i-1;} - 5 - 数据结构实验报告 while(k c.elem[i++]=a.elem[k++]; k++; c.length=i-1; } return; } 链式存储 void getList_Sq(SqList a,LinkList b,LinkList c) { int k=0; LNode *p=c; while(b->next!=NULL||k<=a.length) if(a.elem[k]>b->data) { p->next=b; p=b; b=b->next; p->next=NULL; } else { LNode *q=(LinkList)malloc(sizeof(LNode)); q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; - 6 - 数据结构实验报告 } while(b!=NULL) {p->next=b; p=b; b=b->next;} while(k<=a.length) { while(1); LNode *q=(LinkList)malloc(sizeof(LNode)); q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; } return; } 四、 程序清单: #include using namespace std; typedef struct{ int elem[100]; int length; int listsize; }SqList; typedef struct LNode{ int data; struct LNode *next; - 7 - 数据结构实验报告 }LNode,*LinkList; int create_sq(SqList &a,int n) { int num; int i=0; while(i cin>>num; a.elem[i]=num; a.length=i++; } return 1; } int displaya(SqList &a) { int i=0; cout< cout< cout< int create_List(LinkList &b,int n) { - 8 - 数据结构实验报告 LNode *q=b; q->next=NULL; LNode *p; for(int i=n;i>0;--i) { int num; p=(LinkList)malloc(sizeof(LNode)); cin>>num; p->data=num; p->next=NULL; q->next=p; q=q->next; } } int displayb(LinkList b) { cout< cout< cout< - 9 - 数据结构实验报告 void getList_Sq(SqList a,LinkList b,LinkList c) { int k=0; LNode *p=c; while(b->next!=NULL||k<=a.length) if(a.elem[k]>b->data) { p->next=b; p=b; b=b->next; p->next=NULL; } else { LNode *q=(LinkList)malloc(sizeof(LNode)); q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; } while(b!=NULL) {p->next=b; p=b; b=b->next;} while(k<=a.length) { while(1); LNode *q=(LinkList)malloc(sizeof(LNode)); - 10 - 数据结构实验报告 q->data=a.elem[k]; p->next=q; p=q; p->next=NULL; k++; } return; } void getList_Sq1(SqList a,LinkList b,SqList &c) { int k=0,i=0; while(b!=NULL||kb->data) { c.elem[i++]=b->data; c.length=i-1; b=b->next; } else { c.elem[i++]=a.elem[k++]; c.length=i-1; } while(b!=NULL) {c.elem[i++]=b->data; b=b->next; c.length=i-1;} while(k - 11 - 数据结构实验报告 c.elem[i++]=a.elem[k++]; k++; c.length=i-1; } return; } int display(SqList c) { int i=0; cout< cout< cout< int displayc(LinkList b) { cout< cout< cout< int main(int argc, char *argv[]) - 12 - 数据结构实验报告 { SqList a; LNode *b=(LinkList)malloc(sizeof(LNode)); int n,m,l; cout<<\请输入a中的数据个数\ cin>>n; cout<<\请创建a中的数据\ create_sq(a,n); displaya(a); cout<<\请输入b中的数据个数\ cin>>m; cout<<\请创建b中的数据\ create_List(b,m); displayb(b->next); cout<<\请选择你想C要用的存放类型:\ cout<<\数字1,类型为链式存取,数字2为顺序存储,其他错误\ cin>>l; if(l==1) { LinkList c=(LinkList)malloc(sizeof(LNode)); getList_Sq(a,b->next,c); displayc(c->next); } else if(l==2) { SqList c; getList_Sq1(a,b->next,c); display(c); } else cout<<\输入错误\ - 13 - 数据结构实验报告 system(\ return EXIT_SUCCESS; } 五、 运行结果: 2 3 5 6 8 8 9 11 11 15 20 六、 分析与总结: - 14 - 数据结构实验报告 1,顺序存储结构和链式存储结构有所不同,顺序存储结构是在一组连续的地址中进行存储,而链式存储结构则是通过NEXT域找到下一个元素,因此,在定义两种结构时应该区分开来。包括后面的DISPLAY显示函数也要区分开来。 2,在创建两种线性表时,也要注意使数据停止输入的条件. 3,顺序存储结构和链式存储结构不能直接合并,因为两种结构有所不同,所以在编写程序过程中,要把顺序存储结构转化链式存储结构,如果是这种转换方式就需要将C定义为链式存储结构,如果将链式存储结构转化为顺序存储结构,则需要将C定义为顺序存储结构。 4,这是数据结构第一个实验,也是我第一次入手编数据结构的程序。在此实验中,两输入的线性表必须得元素非递减排序,得出来的合并表才会是非递减的。其实这个程序还不完善,必须再加上排序。两种存储方法中,顺序存储结构所需空间开销更大,所以链式存储结构更合理。 - 15 - 数据结构实验报告 - 16 -
正在阅读:
工学院 数据结构实验报告06-26
电能表安装要求03-09
高中英语 北师大版选择性必修一unit2 SECTION B 语言知识点解析05-15
试论建筑工程施工技术的管理与优化03-16
小学教育学第二章知识点05-02
海南省土地利用总规划09-14
建党伟业影片观后感范本例文04-04
大学文科数学全部公式04-22
有关雪的爱情散文02-14
电工学科课程教学计划03-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 数据结构
- 工学院
- 实验
- 报告