1、目录设计目的: .3设计内容: .31猴子选大王 .32 建立二叉树,层序、先序遍历 .33 各种排序 .3设计过程: .4内容一: .4内容二: .5内容三: .7心得体会: .10设计目的:1. 熟练掌握二叉树的建立和对二叉树进行各种遍历的操作。2. 运用单链表结构解决实际问题,将理论运用到实践。3. 掌握几种重要的排序方法。4. 掌握一些基本的实用的算法。5. 通过实际运用充分掌握书本上的内容。设计内容:1猴子选大王任务:一堆猴子都有编号,编号是 1,2,3 .m ,这群猴子(m 个)按照 1-m 的顺序围坐一圈,从第 1 开始数,每数到第 N 个,该猴子就要离开此圈,这样依次下来,直到
2、圈中只剩下最后一只猴子,则该猴子为大王。要求:输入数据 m,n(m,n 为整数,nusing namespace std;typedef struct Node /创建结构体int num;struct Node *next;Node,*UsNode;void Usf(int m,int n) /m为猴子数,n为单次循环数/创建一个环UsNode head,p,q,r;head=(Node *)malloc(sizeof(Node)*m);p=head;p-num=1;for(int i=2;inext=r;r-num=i;p=r;p-next=head;q=p;p=head;while(q-
3、next!=q)for(int i=1;inext;q=q-next;r=p;p=p-next;q-next=p;free(r);coutnumx;couty;Usf(x,y);A. 概要设计:使用结构体,每个节点代表一只猴子,每个节点存储猴子的编号和指向下一只猴子的指针。使用单链表将所有猴子连接成一圈,使用 2 个指针,指向前后两只猴子,没数到一个猴子 P,将q 的 next 指向 p 的 next,以达到将猴子 P 圈出的目的,循环直到只有 1 只猴子为止;时间复杂度为:O(n);B. 调试分析:输入:猴子数:10数圈循环周期:4输出:猴子王是 5号猴子!内容二:#include #inc
4、lude #define NUM 100using namespace std;int NodeNum;typedef struct nodechar data;struct node *lchild,*rchild;BinTNode,*BinTree; /自定义二叉树的结点类型BinTree CreatBinTree(void) /先序序列建立二叉树BinTree T;char ch;if(ch=getchar()= )return(NULL); /以空格作为续接点标志else T=(BinTNode *)malloc(sizeof(BinTNode); /生成结点T-data=ch;T-l
5、child=CreatBinTree(); /构造左子树T-rchild=CreatBinTree(); /构造右子树return(T);void Pre(BinTree T) /先序遍历if(T) printf(“%c“,T-data); Pre(T-lchild); /先序遍历左子树Pre(T-rchild); /先序遍历右子树void ceng(BinTree T)int front=0,rear=1;BinTree LineNUM,p; /定义结点的指针数组LineLine0=T; /根入队while(frontdata;if(Linefront-lchild!=NULL)Linere
6、ar+=Linefront-lchild;if(Linefront-rchild!=NULL)Linerear+=Linefront-rchild;front+;void main()BinTree T;T=CreatBinTree();coutusing namespace std;void main()int n,*a,l,j=0,c=0,i=0;coutn;a=(int *)malloc(sizeof(int)*n);couta0;c+;for(int x=0;xl;for(j=0;jj;i-)ai=ai-1;aj=l;break;if(j=c-1)ac=l;c+;for(i=0;ius
7、ing namespace std;void swap(int t=a;a=b;b=t;void px(int *a,int l,int r)int i,j;i=l;j=r;if(lr)return;while(i!=j)/判断是否排序完毕while(aj=ai if(ji)swap(ai+,aj);while(aii)i+;if(ji)swap(aj-,ai);px(a,l,i-1);/左半边递归px(a,i+1,r);/右半边递归void main()int n,i=0,m,y=0;cinn;m=n;int *a=(int *)malloc(sizeof(int)*n);while(m-)
8、cinay+;px(a,0,n-1); for(i=0;in;i+)coutai“ “;coutendl;A 设计概要:基本思想是:将要排序的数据分割成两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度:平均为:O(nlog2n),最坏为O(n 2),最好为: O(nlog2n)。 B 调试分析:输入:85 7 3 10 1 2 8 4输出:1 2 3 4 5 7 8 10过程:4 7 3 10 1 2 8 54 5 3 10 1 2 8 74 2 3 10 1 5 8 74
9、 2 3 8 1 5 10 74 2 3 1 8 5 10 71 2 3 4 8 5 10 71 2 3 4 7 5 8 101 2 3 4 5 7 8 10心得体会:经过此次课程设计,我把平时课上学习的理论知识,运用了起来,写成了代码,锻炼了自己的逻辑思维能力,提高了自己的语法;同时,编写代码的过程中,我也把书上的知识整理了一遍,使理论和实践相结合起来,算是做了一次复习。但是,在做这几个题目的时候,发现自己对于树的使用还不是很透彻,尤其是对遍历过程中的递归的使用不是很熟练,甚至不是很理解,我会在以后的学习过程中加强这方面的联系。对于数据结构这门课,我是十分喜爱的,这源于我对算法的喜爱,通过这门课程,我了解了很多算法的思想精髓,虽然没能写出每个算法,但是了解他们,是我学习的第一步。作为一名计算机专业的学生,逻辑思维能力的要求是必须的,而这门课程,刚好也给了我们这样一个机会去锻炼这种能力,虽然学习中有很多问题没有搞清楚,但是我相信,以后更多的实践机会会让我们的技术有很大的提高!