数据结构课程设计实验报告信息安全111班游宇豪09.docx
- 文档编号:7618787
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:29
- 大小:135.81KB
数据结构课程设计实验报告信息安全111班游宇豪09.docx
《数据结构课程设计实验报告信息安全111班游宇豪09.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告信息安全111班游宇豪09.docx(29页珍藏版)》请在冰豆网上搜索。
数据结构课程设计实验报告信息安全111班游宇豪09
(此文档为word格式,下载后您可任意编辑修改!
)
数据结构课程设计
——实验报告
专业班级:
信息安全111班
学生学号:
09
学生姓名:
游宇豪
指导老师:
杨三元老师
完成时间:
2013110
实验一
——双向链表的建立、删除、插入
一、实验目的
了解双向链表的结构特征、描述方法以及有关概念,掌握双向链表建立、删除和插入的基本操作算法。
二、实验内容
建立一个包括头结点和双向链表,在指定位置插入结点和删除结点。
三、实验要点及说明
在双向链表中,每个结点有两个指针域,一个指向其直接后继,一个指向其直接前驱。
四、程序实现
1、建立:
#include { inti; dlnode*p,*q; q=*;i++) { p=(dlnode*)malloc(sizeof(dlnode)); scanf("%d",&p->data); q->next=p; p->prior=q; q=p; } q->next=null; } intprint(dlnode*"); return0; } intmain() { inti,m,n,x; dlnode*); crtlink(&); getchar(); print(0; }程序结果: 2、插入: #include { inti; dlnode*p,*q; q=*;i++) { p=(dlnode*)malloc(sizeof(dlnode)); scanf("%d",&p->data); q->next=p; p->prior=q; q=p; } q->next=null; } intinsertdl(dlnode*."); return0; } s=(dlnode*)malloc(sizeof(dlnode)); s->data=x; s->prior=p->prior; p->prior->next=s; s->next=p; p->prior=s; } intprint(dlnode*"); return0; } intmain() { inti,m,n,x; dlnode*); crtlink(&); getchar(); print() { inti; dlnode*p,*q; q=*;i++) { p=(dlnode*)malloc(sizeof(dlnode)); scanf("%d",&p->data); q->next=p; p->prior=q; q=p; } q->next=null; } intdeletedl(dlnode*."); return0; } s=p; p->prior->next=p->next; p->next->prior=p->prior; free(s); } intprint(dlnode*"); return0; } intmain() { inti,m,n,x; dlnode*); crtlink(&); getchar(); print(top==0;} voidpush(inte); voidpop(int&e); voiddisplay(); }; intsqstack: : length() { returntop; } voidsqstack: : push(inte) {elem[top++]=e; } voidsqstack: : pop(int&e) {if(! empty()) {e=elem[--top]; ; } } voidsqstack: : display() { for(inti=top-1;i>=0;i--) { cout< } cout< } intmain() {inti,x,e; sqstacka(100); cout<<"请输入要建立栈的长度: "< cin>>x; for(i=1;i<=x;i++) {cout<<"请输入要入栈的"< "< cin>>e; a.push(e); } cout<<"显示队栈中的元素为: "< a.display(); cout<<"请输入出栈元素个数: "; cin>>x; cout<<"出栈元素为: "; for(i=1;i<=x;i++) {a.pop(e); cout< } cout< cout<<"显示栈中的剩余元素为: "< a.display(); return0; }运行结果: 实验三 ——数制转换 一、实验目的 数制转换。 二、实验内容 利用栈结构的先进后出的具有特性来实现数制转换。 三、实验要点及说明 用栈结构实现数制转换。 四、程序实现 #include {szzh*p; inta; while(m! =0) { a=m%n; if(a<16&&a>9) a=other(a); p=(szzh*)malloc(sizeof(szzh)); p->data=a; p->next=s->next; s->next=p; m=n; } } intPop(szzh*s) {charx; szzh*p; p=s->next; printf("\n"); printf("转换后的结果: "); while(p! =null){ s->next=p->next; x=p->data; if(x<10) printf("%d",x); elseprintf("%c",x); p=s->next; } printf("\n"); printf("\n"); printf("╰┳uu┳╯谢谢您的使用! 是否继续? ┃︻︻┃\n"); printf("\n"); } intother(inti) { switch(i) { case10: return65;break; case11: return66;break; case12: return67;break; case13: return68;break; case14: return69;break; case15: return70;break; } } intChoose(inti) {intj,x,c; while(i){ if(i==1) {printf("\n~(^_^)进入成功! ~(^_^)\n"); printf("\n输入您想要转换的十进制数: "); scanf("%d",&x); if(x! =0) { printf("\n输入您要转换成的进制: "); scanf("%d",&c); Push(&sq,x,c); Pop(&sq); } else { printf("\n0不能转制\n"); printf("\n~~~~~~~~~~\n"); } } else exit(0); printf("1.继续Y(^_^)Y\n"); printf("\n"); printf("2.退出(^_^)~~\n"); printf("输入您的选择: "); scanf("%d",&i); } } intmain() {inta; initStack(&sq); printf("\n欢迎使用本程序,您有如下两个选择: \n"); printf("\n1.开始数制转换\n"); printf("\n2.退出\n"); printf("\n输入您的选择: "); scanf("%d",&a); Choose(a); } 运行结果: 实验四 ---迷宫求解 一、实验目的 熟悉二维数组,并走出迷宫。 二、实验内容 用二维数组建立迷宫并输出所有路径。 三、实验要点及说明 利用二维数组先建立迷宫,然后用递归输出所有的路径。 四、程序实现 #include maze[i][j]=5; if(i==endI&&j==endJ) { printf("\n其路径为: \n"); for(m=0;m<=M+1;m++) { for(n=0;n<=N+1;n++) { if(maze[m][n]==1) printf("■"); elseif(maze[m][n]==5) printf("通"); elseif(maze[m][n]==0) printf("□"); elseif(maze[m][n]==7) printf(""); } printf("\n"); } } if(maze[i][j+1]==0)visit(i,j+1); if(maze[i+1][j]==0)visit(i+1,j); if(maze[i][j-1]==0)visit(i,j-1); if(maze[i-1][j]==0)visit(i-1,j); maze[i][j]=0; } voidshow() {system("cls"); inta,b,s; printf("\n~(^_^)进入成功! ~(^_^)\n"); printf("\n"); printf("请输入迷宫行数: "); scanf("%d",&M); printf("请输入迷宫列数: "); scanf("%d",&N); printf("输入迷宫(1表示墙0表示通): \n"); if(M==0||N==0) printf("此迷宫为空! "); printf("\n"); for(a=1;a<=M;a++) for(b=1;b<=N;b++) scanf("%d",&maze[a][b]); printf("显示迷宫: \n"); for(a=0;a<=M+1;a++) { for(b=0;b<=N+1;b++) { if(a==0||b==0||a==M+1||b==N+1) maze[a][b]=7; if(maze[a][b]==1) printf("■"); elseif(maze[a][b]==0) printf("□"); elseif(maze[a][b]==7) printf(""); } printf("\n"); } printf("\n输入迷宫的入口(坐标表示): "); scanf("%d,%d",&startI,&startJ); printf("\n输入迷宫的出口(坐标表示): "); scanf("%d,%d",&endI,&endJ); printf("\n"); if(maze[endI][endJ]==1||maze[startI][startJ]==1) { printf("此迷宫不可通过! "); printf("\n"); } else visit(startI,startJ); printf("\n"); } intmain() {ints; printf("欢迎进入迷宫求解系统\n"); printf("\n"); printf("1.生成迷宫\n"); printf("\n"); printf("2.退出\n"); printf("\n"); printf("请输入您的选择: "); scanf("%d",&s); switch(s){ case1: show();break; case2: exit (1); } } 运行结果: 实验五 ——求子串、判断两串是否相等、合并串 一、实验目的 了解串的概念和线性表之间的关系,掌握串的存储结构及串的基本运算 二、实验内容 1、在顺序结构下,求主串s中从第i个字符起,长度为k的子串; 2、将两串连接成一个新串 3、判断两串是否相等 三、实验要点及说明 串是由一个或多个字符组成的有限序列。 主串s中从第i个字符起,长度为k的子串;判断两个串是否相等,首先判断长度,若等,再依次比较每个字符。 四、程序实现 1.合并串: #definemax100 #include { strTypes,l,t; inti=0,j=0; charch; printf("请输入串1,s="); while((ch=getchar())! ='\n') s.str[i++]=ch; s.length=i; printf("请输入串2,l="); while((ch=getchar())! ='\n') l.str[j++]=ch; l.length=j; concat(s,l,t); printf("\n"); } 2.判断两串是否相等 #definemax40 #include else { for(i=0;i<=s.length;i++) if(s.str[i]! =p.str[i]) return0; return1; } } intmain() { strTypes1,s2; charch; inti=0,j=0,m; printf("请输入串s1: "); while((ch=getchar())! ='\n') s1.str[i++]=ch; s1.length=i-1; printf("请输入串s2: "); while((ch=getchar())! ='\n') s2.str[j++]=ch; s2.length=j-1; if((m=equal(s1,s2))! =0) printf("两串相等! \n"); else printf("两串不等! \n"); } 3.顺序串的字串 #definemax10 #include n=s.length; if(i>=0&&i<=n-1&&k>0&&k<=n-1) { for(j=0;j t.str[j]=s.str[i+j]; s.str[k]='\0'; t.length=k; returnt; } if(i>=0&&i<=n-1&&k==0) printf("子串为空! "); else { t.str[0]='\n'; t.length=0; returnt; } } intmain() { strTypes,l; charch; inti=0,j,k; strTypesubString(); printf("输入主串s: "); while((ch=getchar())! ='\n') s.str[i++]=ch; s.length=i; printf("输入子串位置i="); scanf("%d",&i); printf("和子串长度k="); scanf("%d",&k); l=subString(s,i,k); if(l.length==0) printf("i,kiswrong! "); else { printf("输出子串l: "); for(j=0;j printf("%c",l.str[j]); } printf("\n"); } 程序结果: 实验六 ------用递归算法遍历二叉树 一、实验目的 了解二叉树遍历及递归定义,掌握二叉树各种遍历方法和基本操作算法. 二、实验内容 建立一颗排序二叉树,并用递归算法分别用前序,中序和后序遍历之 三、实验要点及说明 二叉树的遍历是指按照某种顺序访问二叉树中的每个节点,使每个节点被访问一次且只被访问一次. 四、程序实现 #include } bnode*ins_lc(bnode*p,intx) { bnode*q; if(p==null) printf("Illegalinsert."); else { q=(bnode*)malloc(sizeof(bnode)); q->data=x; q->lc=null; q->rc=null; if(p->lc! =null) q->rc=q->lc; p->lc=q; } } bnode*ins_rc(bnode*p,intx) { bnode*q; if(p==null) printf("Illegalinsert."); else { q=(bnode*)malloc(sizeof(bnode)); q->data=x; q->rc=null; q->lc=null; if(p->rc! =null) q->lc=q->rc; p->rc=q; } } voidprorder(bnode*p) { if(p==null) return; printf("%d\t%u\t%d\t%u\t%u\n",++counter,p,p->data,p->lc,p->rc); if(p->lc! =null) prorder(p->lc); if(p->rc! =null) prorder(p->rc); } voidpreorder(bnode*p) { if(p==null) return; printf("%d\t",p->data); if(p->lc! =null) preorder(p->lc); if(p->rc! =null) preorder(p->rc); } voidinorder(bnode*p) { if(p==null) return; if(p->lc! =null) inorder(p->lc); printf("%d\t",p->data); if(p->rc! =null) inorder(p->rc); } voidpostorder(bnode*p) { if(p==null) return; if(p->lc! =null) postorder(p->lc); if(p->rc! =null) postorder(p->rc); printf("%d\t",p->data); } intChoose() { bnode*bt,*p,*q; intx,j; printf("\n~(^_^)进入成功! ~(^_^)\n"); printf("\n"); printf("请输入节点,以-1结束: \n"); scanf("%d",&x); p=creat(x,null,null); bt=p; scanf("%d",&x); while(x! =-1) { p=bt; q=p; while(x! =p->data&&q! =null) { p=q; if(x q=p->lc; else q=p->rc; } if(x==p->data) { printf("数据输入有误! "); return0; } else if(x *ins_lc(p,x); else ins_rc(p,x); scanf("%d",&x); }system("cls"); p=bt; printf("排序二叉树的结构: \n"); printf("序号\t地址\t节点\t左孩子\t右孩子\n"); prorder(p); while(j){ printf("\n请输入你要的功能\n"); printf("\n"); printf("1: 前序遍历二叉树\n"); printf("2: 中序遍历二叉树\n"); printf("3: 后序遍历二叉树\n"); printf("0.退出\n"); printf("\n"); scanf("%d",&j); switch(j){ case1: printf("先序遍历次序: \n"); preorder(p);break; case2: printf("中序遍历次序: \n"); inorder(p);break; case3: printf("后序遍历次序: \n"); postorder(p);break; case0: exit (1); } }} intmain() { intj; while(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实验 报告 信息 安全 111 班游宇豪 09