《我的暑假数据结构练习题及解一.doc》由会员分享,可在线阅读,更多相关《我的暑假数据结构练习题及解一.doc(6页珍藏版)》请在金锄头文库上搜索。
1、第一周培训题宋细辉 2011114119第1题 (分值:3分) 输入字符串str,倒叙输出str,注意支持中文,例如 “Tom吃西瓜”输出 “瓜西吃moT”。#include#include#define N 20void main() int i=0,j=0,tagN; char strN,sN3; char *pN,*q; printf(请输入任意一个字符串:n); gets(str); q=str; while(*q!=0) if(*q=0&*q=130) tagi=1; pi=q; q+;i+; else tagi=0; pi=q;q=q+2;i+; i-; for(j=0;j=0)i
2、f(tagi)printf(%c,si0);elseprintf(%c%c,si0,si1);i-;printf(n);第2题 (分值:3分) 在主函数中输入10个等长的字符串。用另外一函数对他们进行排序(采用字符的升序或降序)。然后在主函数输出这10个已经排好序的字符串(不允许采用strcmp函数)#include#include#define N 10#define M 100int Compare(char p1M,char p2M)int i=0;while(p1i!=0&p2i!=0)if(p1ip2i)return 1;else if(p1ip2i)return 0;elsei+;
3、if(p2i=0)return 1;return 0;Order(char *pN)char tM;int i,j;for(i=1;iN;i+)for(j=0;jN-i;j+)if(Compare(pj,pj+1)strcpy(t,pj);strcpy(pj,pj+1);strcpy(pj+1,t);void main()char *pN,strNM;int i;printf(请输入%d个等长的字符串:n,N);for(i=0;iN;i+)gets(stri);pi=stri;Order(p);printf(字符串排序得:n);for(i=0;iN;i+)puts(pi);printf(n);
4、第3题 (分值:3分) 假设有n个人围坐在一张圆桌上,现从某一个人开始报数,数到第m个人出列,如此下去直到所有的人都出列,求出他们的出列顺序(可以将人转换为相应的数字)/*用对列实现*/#include#include#define FALSE 0#define TRUE 1#define MAXSIZE 100typedef structint elemMAXSIZE;int front;int rear;*Queue,Node;void InitQueue(Queue *Q)*Q=(Queue)malloc(sizeof(Node);(*Q)-front=-1;(*Q)-rear=-1;i
5、nt IsEmptyQueue(Queue Q)if(Q-rear=Q-front)return TRUE;return FALSE;int EnterQueue(Queue Q,int x)if(Q-rear+1)%MAXSIZE=Q-front)return FALSE;Q-elemQ-rear=x;Q-rear=(Q-rear+1)%MAXSIZE;return TRUE;int DeleteQueue(Queue Q,int *x)if(Q-rear=Q-front)return FALSE;*x=Q-elemQ-front;Q-front=(Q-front+1)%MAXSIZE;re
6、turn TRUE;void YouXi()int i,k,m,n,x;Queue Q;InitQueue(&Q);printf(请输入总人数,报数,以及从第几个人开始报数k:n);scanf(%d%d%d,&n,&m,&k);for(i=1;i=n;i+)EnterQueue(Q,i);i=1;while(i!=k)DeleteQueue(Q,&x);EnterQueue(Q,x);i+;i=1;while(!IsEmptyQueue(Q)DeleteQueue(Q,&x);if(i=m)printf(%3d出队t,x);i=0;else EnterQueue(Q,x);i+;void ma
7、in()int xz;printf(n0.结束);printf(n1.开始);printf(n请选择:);scanf(%d,&xz);while(xz)YouXi();printf(n还要继续吗?请选择(以0结束):);scanf(%d,&xz);printf(结束!n);/*不用队列*/#include#define N 99void YS()int m,n,a,k,tagN,i,j,flag;printf(请输入总人数n,报数数m,从第几个开始报数a:);scanf(%d%d%d,&n,&m,&a);for(i=1;i=n;i+)tagi=1;i=(a=n)?a:(a%n);j=1;while(tagi&i=n)if(j=m&tagi)printf(%2d出列t,i);tagi=0;j=0;if(i=n)i=0;i+;while(tagi=0&i=n&flag)flag=0;if(i=n)i=0;i+;for(k=1;k=n;k+)if(tagk=1)flag=1;j+;printf(n);void main()int xz;printf(n0.结束操作);printf(n1.开始);printf(n请选择:);scanf(%d,&xz);while(xz)YS();printf(n还要继续吗?请选择:);scanf(%d,&xz);printf(n);