数据结构实验报告_第1页
数据结构实验报告_第2页
数据结构实验报告_第3页
数据结构实验报告_第4页
数据结构实验报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

word文档可自由复制编辑院系:计算机科学学院专业:自动化年级:课程名称:计算机软件基础学号:姓名:指导教师:年月日

年级班号

学号专业自动化

姓名实验名称顺序表的基本操作

实验类型设计型综合型创新型√实验目的或要求实验目的:1.理解线性表顺序存储结构的存储方式及其特点。 2.掌握对顺序表存储结构的描述、基本操作的算法实现。3.掌握通过简单实验对C语言基础知识进行回顾;为后序的实验做准备。实验要求:1.程序采用模块化设计。(独立的功能要用独立的函数来实现。)2.建立相应的功能菜单。(针对本程序的5个功能建立相应的五个功能菜单选择相应的功能选项后进入相应的功能操作界面)3.每次实验完成后我都会随机挑选20%左右的同学的程序进行检查,程序必须能够实现所有要求的功能,并对指定的任一模块进行详细的讲解。若未通过检查视为本次实验不合格。4.实验报告根据模板要求认真填写。实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)#include<stdio.h>#include<string.h>#include<stdlib.h>#defineN100#defineM10intf;typedefstruct{ charstr[20];}st;typedefstruct{ intlen; st*data; intlinesize;}linklist;voidinit(linklist&l) //初始化函数{ l.len=0; l.data=(st*)malloc(N*sizeof(st)); l.linesize=N;}voidinput(linklist&l,inti) //输入函数{ printf("请输入第%d个数据:\t",i+1); fflush(stdin); gets(l.data[i].str);}voidmenu(){ charch; printf("\t|*************************主菜单*************************|\n"); printf("\t||\n"); printf("\t|1、录入数据2、查询数据|\n"); printf("\t||\n"); printf("\t|3、删除数据4、插入数据|\n"); printf("\t||\n"); printf("\t|5、修改数据6、退出系统|\n"); printf("\t||\n"); printf("\t|********************************************************|\n"); printf("\t请输入你想进行的操作(1~6):\t"); fflush(stdin); scanf("%d",&f); system("cls"); if(f>6||f<1) { printf("输入错误!\n按任意键返回主菜单重新输入!\n"); fflush(stdin); scanf("%c",&ch); system("cls"); menu(); }}voiddisplay(linklist&l) //输出函数{ inti;charch; if(l.len==0) { printf("顺序表为空!\n按任意键返回主菜单!\n"); fflush(stdin); scanf("%c",&ch); system("cls"); menu(); } for(i=0;i<l.len;i++) { printf("第%d个数据是:\t",i+1); puts(l.data[i].str); }}voidcreatlist(linklist&l) //创建顺序表{ inti; i=l.len; charch,ch1; if(l.len==0) { printf("|*************************开始创建顺序表*************************|\n"); } input(l,i); i++; l.len++; printf("是否继续输入?<y/n>:\t"); fflush(stdin); scanf("%c",&ch); while(ch=='y'||ch=='Y') { if(l.len>=l.linesize) { st*newbase; newbase=(st*)realloc(l.data,(N+M)*sizeof(st)); l.data=newbase; l.linesize+=M; } input(l,i); i++; l.len++; fflush(stdin); //ch=getchar(); printf("是否继续输入?<y/n>:\t"); scanf("%c",&ch); } system("cls"); printf("输入完成后的数据为:\n"); display(l); printf("按任意键返回主菜单!\n"); fflush(stdin); scanf("%c",&ch1); system("cls"); menu();}intdatasearch(linklist&l) //查询函数{ stshuju; inti,j; j=-1; if(l.len==0) { returnj; } printf("请输入你要查询的数据:\t"); fflush(stdin); gets(shuju.str); i=0; while(i<l.len) { if(strcmp(l.data[i].str,shuju.str)==0) { j=i+1; printf("该数据的位置是:%d\n",j); returnj; } i++; } printf("未找到该数据!\n"); returnj;}voiddatadelete(linklist&l) //删除函数{ charch; inti,j; printf("请输入你需要删除的数据的位置:\n"); fflush(stdin); scanf("%d",&i); for(j=i-1;j<l.len;j++) { l.data[j]=l.data[j+1]; } l.len--; printf("删除成功!\n"); printf("删除后的数据为:\n"); display(l); printf("按任意键返回主菜单!\n"); fflush(stdin); scanf("%c",&ch); system("cls"); menu();}voiddatainsert(linklist&l) //插入函数{ inti,j; charch; charshuju[20]; if(l.len>=l.linesize) { st*newbase; newbase=(st*)realloc(l.data,(N+M)*sizeof(st)); l.data=newbase; l.linesize+=M; } printf("请输入你要插入数据的位置:\n"); fflush(stdin); scanf("%d",&i); printf("请输入你要插入的数据:\n"); fflush(stdin); gets(shuju); for(j=l.len-1;j>=i-1;j--) { l.data[j+1]=l.data[j]; } strcpy(l.data[i-1].str,shuju); l.len++; printf("插入成功!\n"); printf("插入完成后的数据为:\n"); display(l); printf("按任意键返回主菜单!\n"); fflush(stdin); scanf("%c",&ch); system("cls"); menu();}voiddatamodify(linklist&l){ inti; charshuju[20]; charch,ch1; printf("请输入你要修改的数据的位置:\t"); fflush(stdin); scanf("%d",&i); printf("第%d个数据是:\t%s\n",i,l.data[i-1].str); printf("确认修改?<y/n>\t"); fflush(stdin); scanf("%c",&ch); if(ch=='y'||ch=='Y') { printf("请输入修改后的数据:\t"); fflush(stdin); gets(shuju); strcpy(l.data[i-1].str,shuju); printf("修改成功!\n"); printf("修改完成后的数据为:\n"); display(l); } printf("按任意键返回主菜单!\n"); fflush(stdin); scanf("%c",&ch1); system("cls"); menu();}voidmain(){ inti; charch; linklistl; init(l); system("colora"); menu(); while(f!=0) { switch(f) { case1:creatlist(l);break; case2:i=datasearch(l); printf("按任意键返回主菜单!\n"); fflush(stdin); scanf("%c",&ch); system("cls"); menu();break; case3:datadelete(l);break; case4:datainsert(l);break; case5:datamodify(l);break; case6:exit(0); } }}实验结果分析及心得体会成绩评定教师签名:2013年月日年级班号

学号

专业自动化

姓名实验名称单循环链表的基本操作实验类型设计型综合型创新型√实验目的或要求实验要求:1.理解线性表链式存储结构的存储方式及其特点。 2.掌握对链表存储结构的描述、基本操作的算法实现。3.通过实验掌握对C语言指针的基本应用。实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)#include<stdio.h>#include<stdlib.h>structlist{ charc; structlist*next;};intflag=1;structlist*_creat_(){ structlist*p1,*p2,*head; head=p1=p2=(list*)malloc(sizeof(structlist)); p1->c=getchar(); while(p1->c!='#') { p2=p1; p1=(list*)malloc(sizeof(structlist)); p1->c=getchar(); p2->next=p1; } p2->next=NULL; returnhead;}void_search_(structlist*p,charc){ for(;p;p=p->next) if(p->c==c) { printf("找到%c\n",c); return; } printf("未找到%c\n",c);}structlist*_insert_(structlist*p,intpos,charc){ structlist*t,*pre,*head=p; t=(list*)malloc(sizeof(structlist)); t->c=c; if(pos<=1) { t->next=p; returnt; } while(--pos&&p->next) { pre=p; p=p->next; } if(p->next==NULL) { p->next=t; t->next=NULL; returnhead; } t->next=p; pre->next=t; returnhead;}structlist*_delete_(structlist*p,charc){ structlist*head=p,*pre; while(p) { if(p->c==c) break; pre=p; p=p->next; } if(p==NULL) returnhead; elseif(p==head) { head=p->next; free(p); returnhead; } else { pre->next=p->next; free(p); returnhead; }}void_print_(structlist*p){ for(;p;p=p->next) putchar(p->c); putchar('\n');}voidmenu(){ charch; printf("\t\t1、创建单循环链表\n\n"); printf("\t\t2、查找字符\n\n"); printf("\t\t3、插入字符\n\n"); printf("\t\t4、删除字符\n\n"); printf("\t\t5、退出操作\n\n"); printf("\t****************************************\n"); printf("\t\t输入操作序号:"); fflush(stdin); scanf("%d",&flag); if(flag<1||flag>5) { printf("操作序号输入错误!\n"); printf("按回车键返回重新输入!\n"); fflush(stdin); scanf("%c",&ch); system("cls"); menu(); }}voidmain(){ structlist*p; charc,ch; intn; while(flag!=0) { menu(); switch(flag) { case1: printf("输入一串字母'#'结束:\n"); p=_creat_(); _print_(p);break; case2: printf("输入要查找的字母:\n"); scanf("\n%c",&c); _search_(p,c);break; case3: printf("输入要插入的字母和位置:\n"); scanf("\n%c",&c); scanf("%d",&n); p=_insert_(p,n,c); _print_(p);break; case4: printf("输入要删除的字母:\n"); scanf("\n%c",&c); p=_delete_(p,c); _print_(p);break; case5:exit(0); } printf("按回车键返回!\n"); fflush(stdin); scanf("%c",&ch); system("cls"); }}实验结果分析及心得体会成绩评定教师签名:2013年月日年级2012班号

学号专业

姓名实验名称二叉树的基本操作实验类型设计型综合型创新型√实验目的或要求实验要求:1)从键盘输入二叉树的各结点值,按先序递归方式创建二叉树2)分别实现先序、中序、后序递归遍历二叉树3)输出二叉树的高度4)输出二叉树的按层次遍历序列*5)以菜单方式运行实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)实验原理(算法流程)#include<stdio.h>#include<stdlib.h>#include<string.h>typedefcharelemtype;typedefstructnode{ elemtypedata; structnode*lchild,*rchild;}bitree;intflag;bitree*creat_tree() //创建二叉树{ charc;bitree*root; printf("输入二叉树的节点:\t"); fflush(stdin); scanf("%c",&c); if(c=='@') root=NULL; else { root=(bitree*)malloc(sizeof(bitree)); root->data=c; root->lchild=creat_tree(); root->rchild=creat_tree(); } return(root); }voidDLR(bitree*r) //先序遍历{ if(r!=NULL) { printf("%c",r->data); DLR(r->lchild); DLR(r->rchild); }}voidLDR(bitree*r) //中序遍历{ if(r!=NULL) { LDR(r->lchild); printf("%c",r->data); LDR(r->rchild); }}voidLRD(bitree*r) //后续遍历{ if(r!=NULL) { LRD(r->lchild); LRD(r->rchild); printf("%c",r->data); }}intbitreeDepth(bitree*r) //求二叉树的深度{ inth1,h2; if(r==NULL) return0; else { h1=bitreeDepth(r->lchild); h2=bitreeDepth(r->rchild); if(h1>h2) returnh1+1; else returnh2+1; }}voidmenu(){ charch; system("cls"); printf("\t******************二叉树的基本操作******************\n\n"); printf(" 1、创建二叉树\n\n"); printf("\t2、二叉树的先序遍历\n\n"); printf("\t3、二叉树的中序遍历\n\n"); printf("\t4、二叉树的后序遍历\n\n"); printf("\t5、二叉树的深度\n\n"); printf("\t6、退出操作\n\n"); printf("\t****************************************************\n"); printf("\t请输入操作序号:\t"); fflush(stdin); scanf("%d",&flag); if(flag<1||flag>6) { system("cls"); printf("输入操作序号错误!\n"); printf("按回车键返回重输入!\n"); fflush(stdin); scanf("%c",&ch); menu(); }}voidmain(){ charch; intj; bitree*r; while(1) { system("color1e"); inti; menu(); switch(flag) { case1:system("cls");r=creat_tree();menu();break; case2:DLR(r);printf("\n"); printf("按回车键返回...\n"); fflush(stdin); scanf("%c",&ch);break; case3:LDR(r);printf("\n"); printf("按回车键返回...\n"); fflush(stdin); scanf("%c",&ch);break; case4:LRD(r);printf("\n"); printf("按回车键返回...\n"); fflush(stdin); scanf("%c",&ch);break; case5:j=bitreeDepth(r);printf("此二叉树的深度是%d\n",j);printf("按回车键返回...\n");fflush(stdin);scanf("%c",&ch);break; case6:exit(0); } }}实验结果分析及心得体会成绩评定教师签名:2013年月日年级2012班号

学号专业

姓名实验名称内部排序算法实验类型设计型综合型创新型√实验目的或要求实验要求:对存储在数组中的整数序列进行排序,要求实现冒泡排序算法(进行优化)和其它任意一种排序算法。 实验原理(

温馨提示

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

评论

0/150

提交评论