数据结构题目及c语言代码

目题程设计《数据结构》课)C语言程序实现采用():3选王(学时目题1:猴子一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。//链表#include<stdio.h>#include<stdlib.h>//链表节点typedefstruct_RingNode{intpos;struct_RingNode*next;}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->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->next;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||n<=0){printf(InputError\n);return0;}建立链表//pHead=(RingNodePtr)malloc(sizeof(RingNode));pHead->pos=1;pHead->next=NULL;CreateRing(pHead,m);//开始出圈printf(\KickOrder:);KickFromRing(pHead,n);printf(\);system(pause);return0;}//数组做:#include<stdio.h>#include<stdlib.h>#include<string.h>voidSelectKing(intMonkeyNum,intCallNum);voidmain(){intMonkeyNum;intCallNum;/*输入猴子的个数*/printf(MonkeyNum=);scanf(%d,MonkeyNum);/*输入M的值*/printf(CallNum=);scanf(%d,CallNum);SelectKing(MonkeyNum,CallNum);}voidSelectKing(intMonkeyNum,intCallNum){int*Monkeys;//申请一个数组,表示所有的猴子;intcounter=0;//计数,当计数为猴子个数时表示选到最后一个猴子了;intposition=0;//位置,数组的下标,轮流遍历数组进行报数;inttoken=0;//令牌,将报数时数到M的猴子砍掉;//申请猴子个数大小的数组,把桌子摆上。Monkeys=(int*)malloc(sizeof(int)*MonkeyNum);if(NULL==Monkeys){printf(Somanymonkeys,systemerror.\n);return;}//将数组的所有内容初始化为0,被砍掉的猴子设置为1memset(Monkeys,0,sizeof(int)*MonkeyNum);//循环,直到选中大王while(counter!=MonkeyNum){//如果这个位置的猴子之前没有砍掉,那么报数有效if(Monkeys[position]==0){token++;//成功报数一个,令牌+1,继续报数直到等于M//如果报数到M,那么将这个猴子砍去if(token==CallNum){,表示砍去1设置为Monkeys[position]=1;//counter++;//计数增加token=0;//设置为0,下次重新报数//如果是最后一个猴子,把它的位置打印,这个就是大王了if(counter==MonkeyNum){printf(Thekingisthe%dmonkey.\n,position+1);}}}//下一个猴子报数position=(position+1)%MonkeyNum;}//释放内存,开头为所有猴子创建的桌子free(Monkeys);return;})3:时学(转逆符字:2目题.,并1个字符)从键盘读入一个字符串,把它存入一个链表(每个结点存储按相反的次序将字符串输出到显示屏。#include<stdio.h>#include<stdlib.h>structnode{structnode*prev;charc;structnode*next;};structnode*input(structnode*top);intmain(void){structnodeT,*top=T,*bottom=T,*p=NULL;T.prev=NULL;T.next=NULL;T.c='\0';bottom=input(top);p=bottom->prev;while(p!=NULL){printf(%c,p->c);p=p->prev;}return0;}structnode*input(structnode*top){structnode*t;charx;while((x=getchar())!='\n'){top->c=x;t=(structnode*)malloc(sizeof(structnode));top->next=t;t->prev=top;t->next=NULL;t->c='\0';top=top->next;}ret...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?