资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第 1 页上海应用技术学院课程设计报告课程名称 数据结构课程设计 设计题目 数据结构课程设计 院系 计算机科学与信息工程学院 专业游戏软件制作与开发 班级 姓名 学号 指导教师 日期 2016-1-14 一. 目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二. 课程设计内容说明1. 项目一(1) 对设计任务内容的概述实现十进制数 N 和二进制数之间的转换。(2) 需求分析或功能描述输入相应的各式正确的数值(可以是混合小数的形式) ,程序按照设定的算法执行后,给出相对应的进制数数值,对于输入数据的合法性可以不做检查。采用栈。(3) 概要设计或程序流程图内容:利用栈实现十进制和其他任意进制数的任意转换输出问题 进制转换原理:N = (N div d) *d + N mod d(其中:div 为整除运算,mod 为求余运算) 步骤: 1 定义栈数据类型,采用链式存储结构实现 2 链栈基本操作函数原型声明 3 初始化栈 4 输入栈 5 输出栈 6 判空栈 7 自定义实现进制转换函数 8 数据调试 9 程序结束 开始第 2 页(4) 详细设计或源代码说明#define STACK_INIT_SIZE 100 /存储空间初始分配量 #define STACKINCREMENT 10 /存储空间分配增量 #define ERROR 0 #define OVERFLOW -2 #include #include#include #include #include #includemath.h typedef int SElemType; typedef struct SElemType *base;/ 在栈构造之前和销毁之后,base 的值为 NULL SElemType *top;/ 栈顶指针 int StackSize; /当前已分配的存储空间 ,以元素为单位 SqStack1; void InitStack(SqStack1 *s) /初始化栈 s-base =(SElemType*)malloc (STACK_INIT_SIZE * sizeof(SElemType); if(!s-base) exit(OVERFLOW); s-top=s-base; s-StackSize= STACK_INIT_SIZE; void Push(SqStack1 *s,SElemType e) / 输入栈 if (s-top-s-base=s-StackSize) s-base=(SElemType *) realloc (s-base,(s-创建栈数制转换函数输出结果第 3 页StackSize+STACKINCREMENT)*sizeof(SElemType); /栈满,追加存储空间 if(!s-base) exit(OVERFLOW); /若内存中没有 s-StackSize+STACKINCREMENT 个连续空间则分配失败 s-top=s-base+s-StackSize; s-StackSize+=STACKINCREMENT; *s-top+ =e; int Pop(SqStack1 *s,SElemType *e) /输出栈 if (s-top=s-base) return ERROR;s-top=s-top-1; *e = *s-top; int StackEmpty(SqStack1 s) /判空栈 if (s.top =s.base) return 1; else return 0; void Conversion(int N,int m) SElemType e; SqStack1 s; InitStack( while(N) Push( printf(转换后的%d 进制数为:,m); while(StackEmpty(s)!=1) Pop( else printf(%d,e); printf(n); void squnion() int n,m; printf(请输入一个十进制数: ); scanf(%d, printf(需要转成的进制 m:); scanf(%d, Conversion(n,m); void linkunion() int a,i,k=-1,y=0; printf(n 请输入一个正确的二进制数:); scanf(%d, printf(n%d 十进制为 :,a); while(a!=0) i=a%10; k+; y+=i*pow(2,k); a=a/10; printf(%dn,y); 第 4 页void list1()int i,flag=1,k;while(flag)printf(*n); printf(t1:十进制转换为任意进制n);printf(t2:二进制转换为十进制n);printf(t0:返回n);printf(t 请选择:n);printf(*n); while (true)scanf(%d,if (i=0 & i #include #include struct Student char name10; char subject10; int num; int grade; Student *next; ; void StuMain(); /学生成绩管理系统的主函数,由 main 函数调用 void StuInput(Student *); /学生成绩管理系统的输入函数,由主函数调用 void StuSelect(Student *); /学生成绩管理系统的查找函数,由主函数调用 void StuAlter(Student *); /学生成绩管理系统的修改函数,由主函数调用 void StuInsert(Student *); /学生成绩管理系统的插入函数,由主函数调用 void StuDelect(Student *); /学生成绩管理系统的删除函数,由主函数调用 void StuSave(Student *); /学生成绩管理系统的存储函数,由主函数调用 void StuOutput(Student *p); /输出函数 int StuImport(Student *head,Student *p); /输入函数 void StuOutput(Student *p) /打印函数,将链表的该节点信息输出 printf(学生姓名:); printf(%s ,p-name); printf(学生号:); printf(%d ,p-num); printf(科目: ); printf(%s ,p-subject); 第 9 页printf(学生成绩:); printf(%d n,p-grade); int StuImport(Student *head,Student *p) Student *Opinion=(Student *)malloc(sizeof(Student); /用来判断输入节点中学生号是否有重复 Opinion=head-next; printf(学生姓名:n); scanf(%s,p-name); printf(学生号:n); scanf(%d, printf(科目:n); scanf(%s,p-subject); if(Opinion!=NULL) if(Opinion-num=p-num&!strcmp(Opinion-subject,p-subject) printf(该学生这门科目已有成绩,请重新输入n); return 1; Opinion=Opinion-next; printf(学生成绩:n); scanf(%d, return 0; void list2() StuMain(); void StuMain() char decide=y; /定义 while 变量,函数是否继续进行 int num=1; /定义 switch 变量,函数跳转到哪个子函数 Student *head; /定义链表的头指针 head=(Student *)malloc(sizeof(Student); /给头指针开辟空间 head-next=NULL; /初始化头指针 while(decide!=n) printf( *n); printf( * 1 输入 2 查找 3 修改 4 插入 *n); printf( * 5 删除 6 存储 7 退出 *n); printf( *n); scanf(%d, switch(num) case 1: StuInput(head); break; case 2: StuSelect(head); break; case 3: StuAlter(head); break; case 4: StuInsert(head);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号