欢迎来到天天文库
浏览记录
ID:35221025
大小:85.00 KB
页数:12页
时间:2019-03-22
《学号-姓名-c语言程序设计实训课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、齐鲁工业大学信息学院《数据结构》课程设计报告题目:图书管理系统专业班级:计科(外包)15-2学号:201503091063姓名:杨朔蓬时间:2016.5.30需求分析1.本演示程序中,堆中元素为整数,堆的大小无限制,堆的输入方式与整型数组输入相同,本程序主要是利用堆排序原理进行设计,实现对输入数据的排序和最大元的输出。2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;相应的输入数据和运算结果显示在其后。3.程序执行命令包括:1)新建大根
2、堆2)输出最大元素3)插入元素至大根堆4)输出大根堆数组5)输出大根堆(按行)6)销毁堆一、概要设计1.抽象数据类型定义ADTHeapSort{数据对象:D={ai
3、ai属于Elemset,i=1,2,3........,n,n=>0};数据关系:R1={ai=>a2i;ai=>a2i+1};基本操作:Init_Sq(&L)操作结果:新建一个堆InitSq(&L)初始条件:堆已存在操作结果:将输入整数插入到大根堆中HeapAdjust(SqList&L,ints)初始条件:堆已存在操作结果:把s调到堆中合适位
4、置HeapSort(&L)初始条件:堆已存在操作结果:无序数列调整为一个大顶堆DelMax(&L)初始条件:堆已存在操作结果:取出最大元素DeleteHeap(&L)操作结果:销毁堆PutList(L)初始条件:堆已存在操作结果:按行输出堆中元素Load_sq(L)初始条件:堆已存在操作结果:输出堆数组}ADTHeapSort一、详细设计#include#includetypedefstruct{int*key;intlength;}SqList;voidLoad_sq(
5、SqListL){//打印堆数组inti;if(L.length){printf("堆数组为:");for(i=1;i<=L.length;i++)printf("%d",L.key[i]);printf("");}elseprintf("堆为空!!");system("pause");system("cls");}voidPutList(SqListL){//按行打印堆inth=0,sum=0,item=1;inti,j,cnt=1,tmp=1;if(L.length){while(sum6、length){sum+=item;h++;item*=2;}printf("------------------------");printf("堆中元素:");for(i=0;i7、;system("cls");}voidHeapAdjust(SqList*L,ints){//调整堆intj;L->key[0]=L->key[s];for(j=2*s;j<=L->length;j*=2){if((jlength)&&(L->key[j]key[j+1]))j++;if(L->key[0]>=L->key[j])break;L->key[s]=L->key[j];s=j;}L->key[s]=L->key[0];}voidHeapSort(SqList*L){//建立大顶堆8、inti;for(i=L->length/2;i>0;i--)HeapAdjust(L,i);}intInit_Sq(SqList*L){//新建堆inti;printf("请输入初始堆的长度:");scanf("%d",&L->length);L->key=(int*)malloc((L->length+1)*sizeof(int));if(!L->key)exit(1);printf("请输入初始堆的各个元素:");for(i=1;i<=L->length;i++)scanf("%d",&L->key9、[i]);HeapSort(L);printf("新建堆成功!");system("pause");system("cls");return1;}voidInitSq(SqList*L){//插入元素inta,i,*newkey;intlen=L->length+1;printf("请输入插入元素个数:");scanf("%d",&a);L->length+=a;newkey=(int*)rea
6、length){sum+=item;h++;item*=2;}printf("------------------------");printf("堆中元素:");for(i=0;i7、;system("cls");}voidHeapAdjust(SqList*L,ints){//调整堆intj;L->key[0]=L->key[s];for(j=2*s;j<=L->length;j*=2){if((jlength)&&(L->key[j]key[j+1]))j++;if(L->key[0]>=L->key[j])break;L->key[s]=L->key[j];s=j;}L->key[s]=L->key[0];}voidHeapSort(SqList*L){//建立大顶堆8、inti;for(i=L->length/2;i>0;i--)HeapAdjust(L,i);}intInit_Sq(SqList*L){//新建堆inti;printf("请输入初始堆的长度:");scanf("%d",&L->length);L->key=(int*)malloc((L->length+1)*sizeof(int));if(!L->key)exit(1);printf("请输入初始堆的各个元素:");for(i=1;i<=L->length;i++)scanf("%d",&L->key9、[i]);HeapSort(L);printf("新建堆成功!");system("pause");system("cls");return1;}voidInitSq(SqList*L){//插入元素inta,i,*newkey;intlen=L->length+1;printf("请输入插入元素个数:");scanf("%d",&a);L->length+=a;newkey=(int*)rea
7、;system("cls");}voidHeapAdjust(SqList*L,ints){//调整堆intj;L->key[0]=L->key[s];for(j=2*s;j<=L->length;j*=2){if((jlength)&&(L->key[j]key[j+1]))j++;if(L->key[0]>=L->key[j])break;L->key[s]=L->key[j];s=j;}L->key[s]=L->key[0];}voidHeapSort(SqList*L){//建立大顶堆
8、inti;for(i=L->length/2;i>0;i--)HeapAdjust(L,i);}intInit_Sq(SqList*L){//新建堆inti;printf("请输入初始堆的长度:");scanf("%d",&L->length);L->key=(int*)malloc((L->length+1)*sizeof(int));if(!L->key)exit(1);printf("请输入初始堆的各个元素:");for(i=1;i<=L->length;i++)scanf("%d",&L->key
9、[i]);HeapSort(L);printf("新建堆成功!");system("pause");system("cls");return1;}voidInitSq(SqList*L){//插入元素inta,i,*newkey;intlen=L->length+1;printf("请输入插入元素个数:");scanf("%d",&a);L->length+=a;newkey=(int*)rea
此文档下载收益归作者所有