成都理工大学数据结构实验报告.docx
本科生实验报告实验课程 数据结构 学院名称 信息科学与技术学院 专业名称 电子信息科学与技术 学生姓名 邓泉铃 学生学号 0 指导教师 于真 实验地点 6B604 实验成绩 二一四年十月二十九日 二一四年十二月十日数据结构实验报告摘要上机实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成不可或缺的一环节。实验着眼于原理与应用的结合,使读者学会如何把书上学到的只是运用到解决实际问题中来,培养动手能力。 本次实验中每个实验题目采取统一格式,包括问题描述、系统设计、系统实现、效率分析四个部分。问题描述旨在让学生建立问题提出的背景,系统设计则让学生在分析问题的基础上设计一相关系统,在系统测试部分则需指出系统功能的具体实现并检验与问题描述中的要求是否相符,在效率分析部分在于让学生明白不仅要设计出能够实现功能的系统,更重的的事还要讲究效率,不忘对系统进行优化。关键字:上机实验;程序设计;调试运行。实验一 线性表的应用一、实验目的:掌握线性表的基本结构和操作方法,培养学生灵活使用结构解决实际问题的能力。二、实验要求:1 认真阅读和掌握本实验的程序。2. 上机运行程序。3. 保存和打印出程序的运行结果,并结合程序进行分析。4. 按照操作需要,打印出文件清单和运行结果。三、实验内容和结果:上机运行给出程序后,实验结果如图:第一步,输入一组数字如(5 4 9 8 7 6 3 8 5 1),用空格隔开,然后存于顺序表中。第二步,输入你想要查找的数字(7),回车后出现的便是此数字所在的位置(3),第三步,输入插入数字的位置(3)再输入要插入的数字(89),回车后出现的便是插入数字后的顺序表,最后一位丢失。第四步,输入要删除数字的位置回车后出现的便是新的顺序表,最后一位数回来了。该程序实现了顺序表的查找,插入,和删除操作。实验作业:设计一个100位以内的长整数加减运算的程序。源程序如下:#include<iostream.h>#include<stdlib.h>int getlength(char *ch) int i;for(i=0;i<100;i+)if(chi='0')break;return i; void plusdata(int *dt,int *pdt,int k,int kk) int i;for(i=0;i<k;i+)dti=dti+pdti;if(dti>9)dti-=10;dti+1+if(dti>9)dti-=10;dti+1+;if(dtkk!=0)i=kk;else i=kk-1;for(;i>=0;i-)cout<<dti;cout<<endl;void minusdata(int *dt,int *mdt,int k,int kk,int signal)int i;for(i=0;i<k;i+)dti=dti-mdti;if(dti<0)dti+=10;dti+1-;if(dti<0)dti+=10;dti+1-;while(dtkk=0)kk-;if(signal=0)cout<<'-'for(i=kk;i>=0;i-)cout<<dti;cout<<endl;void main()char ch1100,ch2100,ch02,ch;int data1100,data2100;int i,j,k1,k2,flag=0;for(i=0;i<100;i+)data1i=0;data2i=0; cout<<"You can input the first data"<<endl; cin>>ch1; cout<<"You can input the second data"<<endl; cin>>ch2; cout<<"What operation you want?( + or - )"<<endl;cin>>ch;ch01='0'j=0; while(ch1j='0')j+;for(i=0;i<99-j;i+)ch1i=ch1i+j;j=0;while(ch2j='0')j+;for(i=0;i<99-j;i+)ch2i=ch2i+j;k1=getlength(ch1);k2=getlength(ch2);j=k1;for(i=0;i<k1;i+) j-; ch00=ch1j; data1i=atoi(ch0); if(ch1i<'0')|(ch1i>'9') flag=1; j=k2; for(i=0;i<k2;i+) j-; ch00=ch2j; data2i=atoi(ch0); if(ch2i<'0')|(ch2i>'9') flag=1; if(flag=0) if(ch='+') if(k1<k2) plusdata(data2,data1,k1,k2); else plusdata(data1,data2,k2,k1);if(ch='-') if(k1=k2) while(data1k1-1=data2k1-1) k1-=1; if(data1k1-1>data2k1-1) minusdata(data1,data2,k2,k2,1); else minusdata(data2,data1,k2,k2,0); else if(k1>k2) minusdata(data1,data2,k2,k1,1); else minusdata(data2,data1,k1,k2,0); else cout<<"You have input a invaluable char!"<<endl; 运行结果如图:实验二 单链表操作一、实验目的:掌握单链表的基本操作:插入、删除、查找等运算。二、实验要求:1 认真阅读和掌握本实验的程序。2. 上机运行程序。3. 保存和打印出程序的运行结果,并结合程序进行分析。4. 按照操作需要,打印出文件清单和运行结果。实验内容和结果:运行所给程序结构如图:第一步,输入一组数字(1 2 3 4 5 6 7 8 9 10 -1)以-1结尾,存放于单链表中,回车后出现的是倒序输出的单链表结果和链表长度(10);第二步,输入查找的位置(2),回车后出现的是该位置上的数字(9);第三步,输入要删除数字的位置(3),回车后出现的便是新的单链表(10 9 7 6 5 4 3 2 1)将8删除了;第四步,输入要插入的位置(5)和数字(99)后,出现的是新的链表(10 9 7 6 99 5 4 3 2 1)。改程序实现了单链表的查找,删除和插入等操作。实验作业:编写一个程序实现下列目标:建立一个链表,用于存放成绩(整型);输出链表中的所有数据、平均成绩和最高成绩。源程序如下:#include<iostream>using namespace std;struct node int ID; int score;node* next; ; void display(const node*); node* create(); void main() node* head = NULL; head = create();if(head != NULL)display(head);else cout<<"学生人数为0"<<endl;node* create() node *head, *temp;int n; cout<<"请输入学生人数:" cin>>n;if(n = 0) return NULL; head = new node;temp = head; for(int i = 1; i <= n; i+) cout<<"请输入第"<<i<<"个学生学号: "cin>>temp->ID;cout<<"请输入第"<<i<<"个学生成绩: "cin>>temp->score;if(i != n)temp->next = new node; temp = temp->next; temp->next = NULL; return head; /display函数/void display(const node* head) int i = 1; int sum = 0; int max = head->score; cout<<endl; while(head) cout<<"第"<<i<<"个学生成绩: "<<head->score<<endl; sum += head->score; if(head->score > max) max = head->score;head = head->next;i+; cout<<"平均分:"<<sum/(i-1)<<endl; cout<<"最高分:"<<max<<endl; 运行结果如下:实验三 数组的基本操作一、实验目的:回顾c语言中数组的定义和基本应用;二、实验要求:1 认真阅读和掌握本实验的程序。2 上机运行本程序。3 保存和打印出程序的运行结果,并结合程序进行分析。三、实验内容:有M个学生,学习N门课程,已知所有学生的各科成绩,编程:分别求每个学生的平均成绩和每门课程的平均成绩。程序如下:#include<stdio.h>#define N 4#define M 5void main()int aNM,i,j;float sum,k;for(i=0;i<N;i+)printf("n输入学生%d的%d门成绩:",i+1,M);for(j=0;j<M;j+)scanf("%d",&aij);for(i=0;i<N;i+)sum=0,k=0;for(j=0;j<M;j+)sum=sum+aij;k=sum/5.0;printf("student %d:%4.2fn",i+1,k);实验四 二叉树一、实验目的:1,进一步掌握指针变量的含义;2,掌握二叉树的结构特征,以及各种存储结构的特点及使用范围;3,掌握用指针类型描述、访问和处理二叉树的运算。二、实验内容: 1,根据输入的数据建立一个二叉树;2,输出二叉树(输出的结果应为树型结构);3,输出其先序、中序和后序遍历的结果。实验程序如下:#include<stdio.h>#include<string.h>#include<malloc.h>#define NULL 0typedef struct BiTNode char data; struct BiTNode *Lchild,*Rchild;BiTNode,*BiTree;BiTree Create(BiTree T) char ch; ch=getchar(); if(ch='#') T=NULL; else if(!(T=(BiTNode *)malloc(sizeof(BiTNode) printf("Error!"); T->data=ch; T->Lchild=Create(T->Lchild); T->Rchild=Create(T->Rchild); return T;void Preorder(BiTree T) if(T) printf("%c",T->data); Preorder(T->Lchild); Preorder(T->Rchild); void zhongxu(BiTree T) if(T) zhongxu(T->Lchild); printf("%c",T->data); zhongxu(T->Rchild); void houxu(BiTree T) if(T) houxu(T->Lchild); houxu(T->Rchild); printf("%c",T->data); void main() BiTree T; printf("请输入数据:n"); T=Create(T); printf("先序遍历为:n"); Preorder(T); printf("中序遍历为:n"); zhongxu(T); printf("后序遍历为:n"); houxu(T); printf("n");运行程序如图:学生实验 心得通过学习以前C语言课程中的函数思想,可以重新熟悉函数在编程中的设置方法,熟悉函数中参数的设置和传递过程,通过多个函数出现在同一个程序中的实现,便于熟悉全局变量和局部变量在程序中的不同作用域的问题。在这门课程中,用到了很多以前没有学习过的函数以及结构体,自己想设计一种算法实在是他不容易了。 运用链表也可以来实现许多相同的功能,但过程相对一些能实现功能的其它程序来说太复杂了,但也是一种好的方法。学生(签名): 年 月 日指导教师评语成绩评定:指导教师(签名): 年 月 日