ImageVerifierCode 换一换
格式:DOCX , 页数:49 ,大小:28.42KB ,
资源ID:5678145      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5678145.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构 题目及c语言代码.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、数据结构 题目及c语言代码数据结构课程设计题目(程序实现采用C语言)题目1:猴子选王(学时:3)一堆猴子都有编号,编号是1,2,3 .m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 /链表#include #include / 链表节点typedef struct _RingNode int pos; struct _RingNode *next;RingNode, *RingNodePtr;/ 创建约瑟夫环,pHe

2、ad:链表头指针,count:链表元素个数void CreateRing(RingNodePtr pHead, int count) RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(-count 0) pCurr = (RingNodePtr)malloc(sizeof(RingNode); i+; pCurr-pos = i; pPrev-next = pCurr; pPrev = pCurr; pCurr-next = pHead; / 构成环状链表void KickFromRing(RingN

3、odePtr pHead, int n) RingNodePtr pCurr, pPrev; int i = 1; / 计数 pCurr = pPrev = pHead; while(pCurr != NULL) if (i = n) / 踢出环 printf(n%d, pCurr-pos); / 显示出圈循序 pPrev-next = pCurr-next; free(pCurr); pCurr = pPrev-next; i = 1; pPrev = pCurr; pCurr = pCurr-next; if (pPrev = pCurr) / 最后一个 printf(nKing is %

4、d, pCurr-pos); / 显示出圈循序 free(pCurr); break; i+; int main() int n = 0, m = 0; RingNodePtr pHead = NULL; printf(M(person count) = ); scanf(%d, &m); printf(N(out number) = ); scanf(%d, &n); if(m = 0 | n pos = 1; pHead-next = NULL; CreateRing(pHead, m);/ 开始出圈 printf(nKick Order: ); KickFromRing(pHead, n

5、); printf(n); system(pause); return 0;/数组做:#include#include#includevoid SelectKing(int MonkeyNum, int CallNum);void main() int MonkeyNum; int CallNum; /* 输入猴子的个数 */ printf(Monkey Num = ); scanf(%d, &MonkeyNum); /* 输入M的值 */ printf(Call Num = ); scanf(%d, &CallNum); SelectKing(MonkeyNum, CallNum); voi

6、d SelectKing(int MonkeyNum, int CallNum) int *Monkeys; / 申请一个数组,表示所有的猴子; int counter = 0; /计数,当计数为猴子个数时表示选到最后一个猴子了; int position = 0; / 位置,数组的下标,轮流遍历数组进行报数; int token = 0; / 令牌,将报数时数到M的猴子砍掉; / 申请猴子个数大小的数组,把桌子摆上。 Monkeys = (int *)malloc(sizeof(int)* MonkeyNum); if (NULL = Monkeys) printf(So many monk

7、eys, system error.n); return; / 将数组的所有内容初始化为0,被砍掉的猴子设置为1 memset(Monkeys, 0, sizeof(int)*MonkeyNum); / 循环,直到选中大王 while(counter != MonkeyNum) / 如果这个位置的猴子之前没有砍掉,那么报数有效 if (Monkeysposition = 0) token+; / 成功报数一个,令牌+1,继续报数直到等于M / 如果报数到M,那么将这个猴子砍去 if (token = CallNum) Monkeysposition = 1; / 设置为1,表示砍去 count

8、er+; / 计数增加 token = 0; / 设置为0,下次重新报数 / 如果是最后一个猴子,把它的位置打印,这个就是大王了 if (counter = MonkeyNum) printf(The king is the %d monkey.n, position+1); / 下一个猴子报数 position = (position + 1)%MonkeyNum; / 释放内存,开头为所有猴子创建的桌子 free(Monkeys); return;题目2 :字符逆转(学时:3)从键盘读入一个字符串,把它存入一个链表(每个结点存储1个字符),并按相反的次序将字符串输出到显示屏。#includ

9、e #include struct node struct node *prev; char c; struct node *next;struct node *input(struct node *top);int main(void) struct node T,*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; return 0;struct node *input(struct n

10、ode *top) struct node *t; char x; while(x=getchar()!=n) top-c=x; t=(struct node *)malloc(sizeof(struct node); top-next=t; t-prev=top; t-next=NULL; t-c=0; top=top-next; return top;题目3 :工资核算(学时:3)设有一个单位的人员工资有如下信息:name、department、 base pay、allowance、total。现从键盘输入一组人员工资数据并将它们存储到名为paydata的文件中;再从paydata取出工

11、资数据并给每个人的base pay增加100元,增加后将工资数据显示于屏幕(每行1人)。#include #include #define SIZE 2#define LENTH sizeof(struct stuff) struct stuff char name100; char department100; int basepay; int allowance; int total; stuffSIZE; main() FILE *fp; int i; printf(Please enter name department basepay allowance:n); for(i=0;iS

12、IZE;i+) scanf(%s %s %f %f,&stuffi.name,&stuffi.department,&stuffi.basepay,&stuffi.allowance); if(fp=fopen(paydata.dat,wb)=NULL) printf(Cant open filen); return 0; for(i=0;iSIZE;i+) if(fwrite(&stuffi,LENTH,1,fp)!=1) printf(文件写入出错n); fclose(fp); if(fp=fopen(paydata.dat,rb)=NULL) printf(Cant open filen

13、); printf(修改过后的结果:n); for(i=0;iSIZE;i+) fread(&stuffi,LENTH,1,fp); stuffi.total=stuffi.basepay+100+stuffi.allowance; printf(%-10s%-10s %f %f %fn,stuffi.name,stuffi.department,stuffi.basepay+100,stuffi.allowance,stuffi.total); fclose(fp); return 0; 题目4:满足条件的有序表生成(学时:3)已知三个有序表A、B、C,它们皆由同一类元素构成,现要求对于表A

14、作以下运算而获得有序表D:排出A中所有的既在B中又在C中出现的元素。另外该任务要求具有建立有序表功能以及输出有序表到屏幕的功能。#include void main() int a7,b5,c6,d7; int i,j,k,t,m; printf(nPlease enter 7 numbers of A:); for(i=0;i7;i+) scanf(%d,&ai); for(j=0;j6;j+) for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; printf(the sorted numbers:n); for(i=0;i7;i+) printf(%5d,ai); pr

15、intf(nPlease enter 5 numbers of B:); for(i=0;i5;i+) scanf(%d,&bi); printf(n); for(j=0;j4;j+) for(i=0;ibi+1) t=bi;bi=bi+1;bi+1=t; printf(the sorted numbers:n); for(i=0;i5;i+) printf(%5d,bi); printf(nPlease enter 6 numbers of C:); for(i=0;i6;i+) scanf(%d,&ci); for(j=0;j5;j+) for(i=0;ici+1) t=ci;ci=ci+

16、1;ci+1=t; printf(the sorted numbers:n); for(i=0;i6;i+) printf(%5d,ci); printf(n); for(i=0;i5;i+) for(j=0;j6;j+) if(bi=cj) for(k=0;k7;k+) if(bi=ak) ak=m; printf(n); k=0; for(i=0;i7;i+) if(ai!=m) dk=ai; k+; printf(生成的有序表d为 ); for(i=0;ik;i+) printf(%4d,di); printf(n); 题目5:一元 多项式的减法(学时:6)设有两个一元多项式A(x),B

17、(x),请完成运算A(x)+B(x)、A(x)-B(x),要求多项式采用链表进行存储。另外该任务要求具有建立多项式链表以及输出多项式到屏幕的功能。#include struct Polynode int coef; int exp; Polynode *next;Polynode,*Polylist;void Polycreate(Polylist head) Polynode *rear,*s; int c,e; rear=head;printf(请输入多项式的系数项和指数项); scanf(%d,%d,&c,&e); while(c!=0) s=(Polynode*)malloc(size

18、of(Polynode); s-coef=c; s-exp=e; rear-next=s; rear=s; scanf(%d,%d,&c,&e); rear-next=NULL;void Polyadd(Polylist polya,Polylist polyb) Polynode *p,*q,*tail,*temp; int sum; p=polya-next; q=polyb-next; tail=polya; while(p!=NULL&q!=NULL) if(p-expexp) tail-next=p; tail=p; p=p-next; else if(p-exp=q-exp) su

19、m=p-coef+q-coef; if(sum!=0) p-coef=sum; tail-next=p; tail=p; p=p-next; temp=q; q=q-next; free(temp); else temp=p; p=p-next; free(temp); q=q-next; free(temp); else tail-next=q; tail=q; q=q-next; if(p!=NULL) tail-next=p; else tail-next=q;void Polysubstract(Polylist polya,Polylist polyb)Polylist h=poly

20、b;Polylist p=pb-next;Polylist pd;while(p)p-coef*=-1;p=p-next;pd=Polyadd(pa,h);for(p=h-next;p;p=p-next)p-coef*=-1;return pd;void PrintPolyn(Polyn P)void printfPolyn(Polynode *head)Polynode *p=head-next;while(p)printf(%dx%d,p-coef,p-exp);if(p-next)printf(+);p=p-next;int main() Polynode *La,Lb; La=Poly

21、create(); Lb=Polycreate(); PrintPolyn(La); printf(/n); PrintPolyn(Lb); printf(/n); Polyadd(polya,polyb); printPolyn(polya); return 0;题目6:床位分配(学时:6)某客店有N个等级的房间,第k级客房有A(k)个,每个房间有B(k)个单人床,以菜单调用方式设计为单身旅客分配床位以及离店时收回床位的程序。要求分配成功时,印出旅客姓名、年龄、性别、到达日期、客房等级、房间号及床位号;分配不成功时,允许更改房间等级,若不更改等级,印出“满客”提示。#include#incl

22、ude#include#include#define N 3typedef struct Room int roomlevel; int roomnum; int bednum; int peoplenum; int bedN; int sex; char name10; struct Room *next;Room;Room *creat(int roomlevel,int room,int bed) Room *head,*p,*q; int i=1,j,h,num=1; head=(Room *)malloc(sizeof(Room); head-peoplenum=0; q=head;

23、 while (i=roomlevel) for(j=1; jroomlevel=i; p-roomnum=num+; p-peoplenum=0; p-sex=-1; for(h=0; hbedh=0; q-next=p; q=p; i+; p-next=NULL; return(head); void Init(Room *head) Room *p; int i; p=head; while(p!=NULL) p-peoplenum=0; p-sex=-1; for(i=0;ibedi=0; p=p-next; printf(nn 操作成功 n);void Getin(Room *hea

24、d) Room *p; int i,s,lev,age; char name10; int number=0; int bednumber=0; printf(nn 欢迎使用订房系统 nn); printf(请输入性别(1为男,2为女):); scanf(%d,&s); printf(nn 请输入想入住的房间等级:); scanf(%d,&lev); p=head-next; while(p!=NULL) if(p-roomlevel=lev)&(p-sex=s)|(p-sex=-1) for(i=0;ibedi=0) number=p-roomnum; bednumber=i+1; p-be

25、di=1; p-sex=s; p-peoplenum+; break; if(number!=0)break; p=p-next; if(number=0&bednumber=0) printf(n 满客 n); else head-peoplenum+; printf(n订单已下,请输入客人信息: n); printf(名字:n); scanf(%s,name); printf(年龄 :n); scanf(%d,&age); printf(您的订单3:n); printf(名字 年龄 性别 到达时间 房间等级 房间号 床位号n); if (s=1) printf(%s %d male 11-19 %d %d %dn,name,age,p-roomlevel,p-roomnum,bednumber); else printf(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1