数据结构与算法实训心得 数据结构实验课的心得体会(3篇)
我们在一些事情上受到启发后,应该马上记录下来,写一篇心得体会,这样我们可以养成良好的总结方法。那么你知道心得体会如何写吗?以下是小编帮大家整理的心得体会范文,欢迎大家借鉴与参考,希望对大家有所帮助。
数据结构与算法实训心得 数据结构实验课的心得体会篇一
学 生 实 验 报 告 册
课程名称:
学生学号:
所属院部:计算机工程学院
(理工类)
算法与数据结构 专业班级: 计算机统招(1)班
1413101006 学生姓名: 邢亦波
指导教师: 徐永华 15 ——20 16 学年 第 2 学期
金陵科技学院教务处制
实验报告书写要求
实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用a4的纸张。
实验报告书写说明
实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。
填写注意事项
(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明
实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。
实验报告装订要求
实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
实验项目名称: 顺序表 实验学时: 2 同组学生姓名: 无 实验地点: 实验日期: 04.05 实验成绩: 批改教师: 徐永华 批改时间:
实验1 顺序表
一、实验目的和要求
掌握顺序表的定位、插入、删除等操作。
二、实验仪器和设备
turbo c 2.0
三、实验内容与过程(含程序清单及流程图)
1、必做题
(1)编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。编写主函数测试结果。
(2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。编写主函数测试结果。(3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。
解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。
(4)删除顺序表中所有等于x的数据元素。
2、选做题
(5)已知两个顺序表a和b按元素值递增有序排列,要求写一算法实现将a和b归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。
程序清单: 1.(1)
#include #define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){</stdio.h
} void display(shun *s){
} main()int i;if(s->length==0)printf(“没有数据n”);else for(i=0;ilength;i++){ } printf(“%-5d”,s->a[i]);int i,j;printf(“需要几个数n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要几个数n”);scanf(“%d”,&s->length);} for(i=0;ilength;i++){ } scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);</s-
{
} init(&s);setup(&s);display(&s);
1.(2)
#include #define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){</stdio.h
} int find(shun *s,int x){ int i;for(i=0;ilength;i++){ int i,j;printf(“需要几个数n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要几个数n”);scanf(“%d”,&s->length);} for(i=0;ilength;i++){ } scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);</s-
if(s->a[i]==x)return i;} return 0;} void display(shun *s){
} main(){
} int x;init(&s);setup(&s);display(&s);printf(“输入xn”);scanf(“%d”,&x);if(find(&s,x))printf(“找到位置是%dn”, find(&s,x));printf(“-1n”);else int i;if(s->length==0)printf(“没有数据n”);else for(i=0;ilength;i++){ } printf(“%-5d”,s->a[i]);</s-
1.(3)#include #define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ s->length=0;</stdio.h
} void setup(shun *s){
} void insert(shun *s,int x){ int i,j;if((s->length+1)>=maxsize){ printf(“溢出n”);exit(0);int i,j;printf(“需要几个数n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要几个数n”);scanf(“%d”,&s->length);} for(i=0;ilength;i++){ } scanf(“%d”,&s->a[i]);printf(“溢出n”);} for(i=0;ilength;i++){ if(s->a[i]>=x)break;} for(j=s->length-1;j>=i;j--){ s->a[j+1]=s->a[j];} s->a[i]=x;s->length++;} void display(shun *s){</s-
int i;if(s->length==0)printf(“没有数据n”);else for(i=0;ilength;i++)</s-
} main(){
} int x;init(&s);setup(&s);printf(“输入xn”);scanf(“%d”,&x);insert(&s,x);display(&s);{ } printf(“%-5d”,s->a[i]);
1.(4)#include #define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){</stdio.h
int i,j;printf(“需要几个数n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要几个数n”);scanf(“%d”,&s->length);s->length=0;printf(“溢出n”);
} void delet(shun *s,int x){ int i,j;for(i=0;ilength;i++){</s-
} void display(shun *s){
} main(){
} int x;init(&s);setup(&s);printf(“输入xn”);scanf(“%d”,&x);delet(&s,x);display(&s);int i;if(s->length==0)printf(“没有数据n”);else for(i=0;ilength;i++){ } printf(“%-5d”,s->a[i]);if(s->a[i]==x){</s-
for(j=i;jlength;j++){ s->a[j]=s->a[j+1];} s->length--;i--;} for(i=0;ilength;i++){ } scanf(“%d”,&s->a[i]);} }</s-
2.#include #define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun a,b,c;void init(shun *s){ } void setup(shun *s){</stdio.h
} } int i,j,t;printf(“需要几个数n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要几个数n”);scanf(“%d”,&s->length);} for(i=0;ilength;i++){ } for(i=0;ilength;i++){</s-
for(j=i+1;jlength;j++){</s-
} if(s->a[i]a[j]){</s-
} t=s->a[i];s->a[j]=t;s->a[i]=s->a[j];scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);
void cat(shun *a,shun *b){ int i,j=0,t;if((a->length+b->length)>=maxsize){
} for(i=0;ilength;i++){ } for(j=0;jlength;j++){</b-
} =a->length+b->length;
} void display(shun *s){
} int i;if(s->length==0)printf(“没有数据n”);else for(i=0;ilength;i++){ } printf(“%-5d”,s->a[i]);} for(i=0;i<;i++){
for(j=i+1;j<;j++){
} if(c.a[i]<c.a[j]){
} t=c.a[i];c.a[j]=t;c.a[i]=c.a[j];c.a[i]=b->a[j];i++;c.a[i]=a->a[i];printf(“溢出n”);exit(0);
main(){
} init(&a);printf(“a初始化n”);setup(&a);init(&b);setup(&b);cat(&a,&b);display(&c);printf(“b初始化n”);
四、实验结果与分析(程序运行结果及其分析)1.(1)
1.(2)
1.(3)
1.(4)
2.金陵科技学院实验报告
五、实验体会(遇到问题及解决办法,编程后的心得体会)
我觉得编程不能只要完成其主要功能就行了,还要考虑到边界值,考虑是否会出错等等。有时候一种方法编不通,不如换种方法编。我觉得编程挺考虑耐心的,恩,就这么多感悟了。
实验项目名称: 单链表 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:
实验2 单链表
一、实验目的和要求
1、实验目的
掌握单链表的定位、插入、删除等操作。
2、实验要求
(1)注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除,以便释放其内存空间。
(2)链表不能实现直接定位,一定注意指针的保存,防止丢失。
二、实验仪器和设备
turbo c 2.0
三、实验内容与过程(含程序清单及流程图)
1、必做题
(1)编写程序建立一个单链表,并逐个输出单链表中所有数据元素。(2)在递增有序的单链表中插入一个新结点x,保持单链表的有序性。
解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插入操作。
(3)编写实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。
2、选做题
已知指针la和lb分别指向两个无头结点单链表的首元结点。要求编一算法实现,从表la中删除自第i个元素起共len个元素后,将它们插入到表lb中第j个元素之前。程序清单:
1.(1)
#include #define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;list *setup(list *s)</stdio.h
{
} void display(list *head){ list *rear;if(head==null){
} } main(){
list *head;head=setup(s);display(head);free(s);rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} rear=rear->next;printf(“%c”,rear->a);printf(“没有数据n”);else list *head=null;list *rear=null;
char c;printf(“请输入c直到$n”);c=getchar();while(c!='$'){
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;
} free(head);1.(2)#include #define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;list *setup(list *s){</stdio.h
} void paixu(list *head){
list *rear;list *p;datatype min;if(head==null){ list *head=null;list *rear=null;
char c;printf(“请输入c直到$n”);c=getchar();while(c!='$'){
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;
} void insert(list *head,datatype x){
list *p;list *q;list *r;if(head==null)printf(“空表n”);p=head;q=head;r=malloc(sizeof(list));r->a=x;while(p->next!=null){
} while(q->next!=p)q=q->next;r->next=p;q->next=r;if(p->next==null)if(x
a){ } p=p->next;break;} p=head;
while(p->next!=null){
do {
rear=rear->next;if(min>rear->a){
} min=rear->a;rear->a=p->a;p->a=min;
min=p->a;rear=p;printf(“空表!n”);exit(0);} while(rear->next!=null);p=p->next;}
} void display(list *head){ list *rear;if(head==null){
} } main(){
} datatype x,c;list *head;head=setup(s);paixu(head);printf(“请输入xn”);c=getchar();x=getchar();insert(head,x);display(head);free(s);free(head);rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} rear=rear->next;printf(“%c”,rear->a);printf(“没有数据n”);else p->next=r;1.(3)#include #define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;</stdio.h
list *setup(list *s){
} list *nizhi(list *head){
list *h;list *rear;int i=0;char b[100];h=malloc(sizeof(list));h->next=head;rear=head;do {
b[i]=rear->a;rear=rear->next;i++;list *head=null;list *rear=null;
char c;printf(“请输入c直到$n”);c=getchar();while(c!='$'){
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;}while(rear->next!=null);b[i]=rear->a;rear=head;for(;i>=0;i--){
} rear->a=b[i];rear=rear->next;
} void display(list *head){ list *rear;if(head==null){
} } main(){
} list *head;head=setup(s);head=nizhi(head);display(head);free(s);free(head);rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} rear=rear->next;printf(“%c”,rear->a);printf(“没有数据n”);else return head;2.#include #define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s1;list *s2;list *setup(list *s){</stdio.h
list *head=null;list *rear=null;
char c;printf(“请输入c直到$n”);c=getchar();while(c!='$')
} void dein(list *la,list *lb,int i,int len,int j){
int k;list *rear;list *t;list *h;list *r;list *q;h=null;rear=la;q=la;for(k=1;k!=i;k++){
} while(q->next!=rear){
t=malloc(sizeof(list));t->a=rear->a;if(h==null)h=t;q=q->next;for(k=1;k<=len;k++)rear=rear->next;if(rear->next==null&&k!=i){
} printf(“没找到i的位置n”);exit(0);
{
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;
} void display(list *head){ list *rear;if(head==null){
rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} printf(“n”);rear=rear->next;printf(“%c”,rear->a);printf(“没有数据n”);else
} q->next=rear;if(r!=null)r->next=null;rear=lb;for(k=1;k!=j;k++){
} q=lb;while(q->next!=rear)q=q->next;r->next=rear;q->next=h;rear=rear->next;if(rear->next==null&&k!=j){
} printf(“没找到j的位置n”);exit(0);else r->next=t;r=t;rear=rear->next;if(rear->next==null&&k<len-1){
} printf(“len太长n”);exit(0);
} } main(){ char c;
} list *la;list *lb;int i,len,j;printf(“建立单链表lan”);la=setup(s1);printf(“建立单链表lbn”);lb=setup(s2);printf(“请输入要删的位置in”);scanf(“%d”,&i);printf(“请输入要删减的数据长度lenn”);scanf(“%d”,&len);printf(“请输入要插入的位置jn”);scanf(“%d”,&j);dein(la,lb,i,len,j);printf(“显示lan”);display(la);printf(“显示lbn”);display(lb);free(la);free(lb);c=getchar();
四、实验结果与分析(程序运行结果及其分析)1.(1)
1.(2)
1.(3)
2.金陵科技学院实验报告
五、实验体会(遇到问题及解决办法,编程后的心得体会)
单链表以前没怎么编过,所以现在编有点陌生,要编译好几次才能运行。我觉得还是不能光看书,还要多编几道题比较有手感。
实验项目名称: 堆栈和队列 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:
实验3 堆栈和队列
一、实验目的和要求
(1)掌握应用栈解决问题的方法。(2)掌握利用栈进行表达式求和的算法。
(3)掌握队列的存储结构及基本操作实现,并能在相应的应用问题中正确选用它们。
二、实验仪器和设备
turbo c 2.0
三、实验内容与过程(含程序清单及流程图)
1、必做题
(1)判断一个算术表达式中开括号和闭括号是否配对。(2)测试“汉诺塔”问题。
(3)假设称正读和反读都相同的字符序列为”回文”,试写一个算法判别读入的一个以’@’为结束符的字符序列是否是“回文”。
2、选做题
在顺序存储结构上实现输出受限的双端循环队列的入列和出列算法。设每个元素表示一个待处理的作业,元素值表示作业的预计时间。入队列采取简化的短作业优先原则,若一个新提交的作业的预计执行时间小于队头和队尾作业的平均时间,则插入在队头,否则插入在队尾。程序清单:
1.(1)
#include #include char a[100];int panduan(char *a){</stdio.h
int i,k,count1=0,count2=0;for(i=0;a[i]!='';i++){ {
count1++;for(k=i+1;a[k]!='';k++){ if(a[k]==')')if(a[i]=='(')
} main(){
} printf(“请输入算式n”);gets(a);if(panduan(a)==1){ } else printf(“算式()不配对n”);printf(“算式()配对n”);
break;} if(a[k]=='')return 0;} if(a[i]==')')} if(count1!=count2)return 0;return 1;count2++;1.(2)
#include int i;void move(int n,char a,char c){ printf(“第%d步:将%d号盘子%c--->%cn”,i++,n,a,c);} void hanno(int n,char a,char b,char c){</stdio.h
} main(){ if(n==1){
} hanno(n-1,a,c,b);move(n,a,c);hanno(n-1,b,a,c);move(1,a,c);else
} int n;char a,b,c;printf(“请输入要移动的盘子数n”);scanf(“%d”,&n);a='a';b='b';c='c';hanno(n,a,b,c);1.(3)
#include #include char s[100];int huiwen(char s[]){</stdio.h
} main(){
while(1){ printf(“请输入字符直到@n”);gets(s);if(huiwen(s))
} printf(“是回文n”);printf(“不是回文n”);else int i,j=0;char b[100];for(i=0;s[i]!='@';i++);for(i=i-1;i>=0;i--){
} j=0;for(i=0;s[i]!='@';i++){ } return 1;return 0;b[j]=s[i];j++;if(s[i]!=b[j])j++;
}
2.#include #define maxsize 100 typedef struct duilie {</stdio.h
int a[maxsize];int head;int rear;}dui;dui *s;void init(dui *s){
} void setup(dui *s,int x){
if(x<((s->a[s->head]+s->a[s->rear])/2)){
} else { s->rear=(s->rear++)%maxsize;s->head=(s->head--)%maxsize;s->a[s->head]=x;s->head=maxsize-1;s->rear=maxsize-1;s->a[s->head]=0;s->a[s->rear]=0;
} } s->a[s->rear]=x;void display(dui *s){
printf(“s队为:”);while(s->head==s->rear){ printf(“%-3d”,s->a[s->head]);
} main(){
} int x;while(1){ printf(“请输入x直到0n”);scanf(“%d”,&x);setup(s,x);if(x==0)} if(s->head!=(s->rear+1)%maxsize)printf(“队满n”);display(s);break;} s->head=(s->head++)%maxsize;
四、实验结果与分析(程序运行结果及其分析)1.(1)
1.(2)
1.(3)
五、实验体会(遇到问题及解决办法,编程后的心得体会)
实验项目名称: 串 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:
实验4 串
一、实验目的和要求
掌握串的存储及应用。
二、实验仪器和设备
turbo c 2.0
三、实验内容与过程(含程序清单及流程图)
1、必做题
(1)编写输出字符串s中值等于字符ch的第一个字符的函数,并用主函数测试结果。
(2)编写输出字符串s中值等于字符ch的所有字符的函数,并用主函数测试结果。
解题思路:可以将第一题程序改进成一个子函数,在本题中循环调用。(3)设字符串采用单字符的链式存储结构,编程删除串s从位置i开始长度为k的子串。
2、选做题
假设以链结构表示串,编写算法实现将串s插入到串t中某个字符之后,若串t中不存在这个字符,则将串s联接在串t的末尾。
提示:为提高程序的通用性,插入位置字符应设计为从键盘输入。程序清单:
1.(1)
#include #include void fun(char s[],char ch){</stdio.h
int i;for(i=0;s[i]!='';i++){
} printf(“没找到n”);if(ch==s[i]){
} printf(“找到字符%c在位置%dn”,s[i],i+1);exit(0);
} main(){
} char s[100],ch;printf(“请输入字符串sn”);gets(s);printf(“请输入要查找的字符chn”);scanf(“%c”,&ch);fun(s,ch);1.(2)
#include #include char s[100];void fun(char s[],char ch){ int i;if(strcmp(s,“")==0){ printf(”字符串s为空n“);exit(0);} for(i=0;s[i]!='';i++){</stdio.h
} main(){ char ch;printf(”请输入字符串sn“);gets(s);printf(”请输入要查找的chn“);scanf(”%c“,&ch);fun(s,ch);} if(ch==s[i])printf(” %c“,s[i]);} 1.(3)
#include #include typedef struct chuanlian { char c;struct chuanlian *next;}chuan;chuan *s;chuan *setup(chuan *s){</stdio.h
} void delet(chuan *chu,int i,int k){
int j;chuan *p;chuan *t;if(chu==null){
} p=chu;for(j=1;jc=ch;if(head==null){ } else</i-1;j++)printf(”空串无法删除n“);exit(0);chuan
} if(rear!=null)rear->next=null;return head;rear->next=s;rear=s;head=s;s=malloc(sizeof(chuan));ch=getchar();
}
void display(chuan *chu){ chuan *p;
} main(){
int i,k;chuan *head;head=setup(s);printf(”请输入要删除字符的位置in“);scanf(”%d“,&i);p=chu;if(chu==null){
} printf(”%c“,p->c);while(p->next!=null){
} p=p->next;printf(”%c“,p->c);printf(”空串n“);exit(0);{
} t=p->next;for(j=1;j<k+1;j++){
} p->next=t;if(p->next==null&&j<k+1){
} t=t->next;printf(”串长度太小,无法删除%d个元素n“,k);exit(0);if(p->next==null&&j<i-1){
} p=p->next;printf(”无法找到第%d位置n“,i);exit(0);
printf(”请输入要删除字符的个数kn“);scanf(”%d“,&k);delet(head,i,k);display(head);free(head);free(s);} 2.#include #include typedef struct chuanlian { char c;struct chuanlian *next;}chuan;chuan *s,*t;chuan *setup(chuan *chu){</stdio.h
chuan *head=null;chuan *rear=null;char ch;printf(”请输入字符ch直到$n“);ch=getchar();while(ch!='$'){ chu=malloc(sizeof(chuan));
chu->c=ch;if(head==null){ head=chu;
} } else rear->next=chu;rear=chu;ch=getchar();} if(rear!=null)rear->next=null;return head;
void insert(chuan *s1,chuan *s2,char x){
chuan *p;chuan *q;p=s1;if(s1==null){
} {
} while(p->next!=null){ if(p->c==x)break;printf(”s是空串n“);exit(0);if(s2==null)printf(”t是空串n“);exit(0);
} } p=p->next;if(p->next==null)p->next=s2;else {
} q=s2;while(q->next!=null)q=q->next;q->next=p->next;p->next=s2;void display(chuan *chu){ chuan *p;
} p=chu;if(chu==null){
} printf(”%c“,p->c);while(p->next!=null){
} p=p->next;printf(”%c“,p->c);printf(”空串n“);exit(0);
main(){
char x,c;printf(”建立单链串tn“);t=setup(t);c=getchar();printf(”建立单链串sn“);s=setup(s);c=getchar();printf(”请输入要在什么字符后插入n");x=getchar();
}
insert(t,s,x);display(t);
</i-1){
</k+1){
</k+1;j++){
</len-1){</p</c.a[j]){
</;j++){
</;i++){</s-