资源描述:
《数据结构经典题目及c语言代码.》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《数据结构》课程设计题目(程序实现采用C语言)题目1:猴子选王(学时:3)一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。//链表#include#include//链表节点typedefstruct_RingNode{intpos;struct_RingNode*next;
2、}RingNode,*RingNodePtr;//创建约瑟夫环,pHead:链表头指针,count:链表元素个数voidCreateRing(RingNodePtrpHead,intcount){RingNodePtrpCurr=NULL,pPrev=NULL;inti=1;pPrev=pHead;while(--count>0){pCurr=(RingNodePtr)malloc(sizeof(RingNode));i++;pCurr->pos=i;pPrev->next=pCurr;pPrev=pCurr;}pCurr->
3、next=pHead;//构成环状链表}voidKickFromRing(RingNodePtrpHead,intn){RingNodePtrpCurr,pPrev;inti=1;//计数pCurr=pPrev=pHead;while(pCurr!=NULL){if(i==n){//踢出环printf("%d",pCurr->pos);//显示出圈循序pPrev->next=pCurr->next;free(pCurr);pCurr=pPrev->next;i=1;}pPrev=pCurr;pCurr=pCurr->nex
4、t;if(pPrev==pCurr){//最后一个printf("Kingis%d",pCurr->pos);//显示出圈循序free(pCurr);break;}i++;}}intmain(){intn=0,m=0;RingNodePtrpHead=NULL;printf("M(personcount)=");scanf("%d",&m);printf("N(outnumber)=");scanf("%d",&n);if(m<=0
5、
6、n<=0){printf("InputError");return0;}//建立链表
7、pHead=(RingNodePtr)malloc(sizeof(RingNode));pHead->pos=1;pHead->next=NULL;CreateRing(pHead,m);//开始出圈printf("KickOrder:");KickFromRing(pHead,n);printf("");system("pause");return0;}//数组做:#include#include#includevoidSelectKing(intMonkey
8、Num,intCallNum);voidmain(){intMonkeyNum;intCallNum;/*输入猴子的个数*/printf("MonkeyNum=");scanf("%d",&MonkeyNum);/*输入M的值*/printf("CallNum=");scanf("%d",&CallNum);SelectKing(MonkeyNum,CallNum);}voidSelectKing(intMonkeyNum,intCallNum){int*Monkeys;//申请一个数组,表示所有的猴子;intcounter=
9、0;//计数,当计数为猴子个数时表示选到最后一个猴子了;intposition=0;//位置,数组的下标,轮流遍历数组进行报数;inttoken=0;//令牌,将报数时数到M的猴子砍掉;//申请猴子个数大小的数组,把桌子摆上。Monkeys=(int*)malloc(sizeof(int)*MonkeyNum);if(NULL==Monkeys){printf("Somanymonkeys,systemerror.");return;}//将数组的所有内容初始化为0,被砍掉的猴子设置为1memset(Monkeys,0,s
10、izeof(int)*MonkeyNum);//循环,直到选中大王while(counter!=MonkeyNum){//如果这个位置的猴子之前没有砍掉,那么报数有效if(Monkeys[position]==0){token++;//成功报数一个,令牌+1,继续报数直到等于