1、数据结构一、试题查看标题:约瑟夫环时 限:500 ms内存限制:2000 K总时限:3000 ms描述:约瑟夫环编号为1,2,3,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计程序输出出列顺序。输入:人数n 报数上限m人员记录1 (格式为:姓名 学号 性别 年龄 班级 健康状况)人员记录2人员记录n输出:第1次报数出列的人员记录第2次报数出列的人员记录第n次报数出列的人员记录输入样例:5 3安弥邵 10000001 女
2、28 计43 一般宰觅 10000002 男 23 计79 健康顾健 10000003 男 27 计29 一般宓顽芳 10000004 女 20 计17 健康能纸垄 10000005 男 18 计11 健康输出样例:顾健 10000003 男 27 计29 一般 安弥邵 10000001 女 28 计43 一般 能纸垄 10000005 男 18 计11 健康 宰觅 10000002 男 23 计79 健康 宓顽芳 10000004 女 20 计17 健康提示:循环表来源:返回#include#include struct Lnode char *name; char *number; cha
3、r *sex; int age; char *classnum; char *health; int num; struct Lnode * next;*L;typedef struct Lnode Linklist;void Creat(Linklist* q,int n);void Ope(Linklist* p,int m);int main() int n,m; scanf(%d%d,&n,&m); L=(Linklist*)malloc(sizeof(Linklist); Creat(L,n); Ope(L,m); return 0;void Creat( Linklist* L,i
4、nt n) int i=1; Linklist *p,*q; p=L; p-name=(char*)malloc(10*sizeof(char); p-number=(char*)malloc(10*sizeof(char); p-sex=(char*)malloc(4*sizeof(char); p-classnum=(char*)malloc(10*sizeof(char); p-health=(char*)malloc(6*sizeof(char); scanf(%s%s%s%d%s%s,p-name,p-number,p-sex,&p-age,p-classnum,p-health);
5、 p-num=i; p-next=NULL; for(i=1;iname=(char*)malloc(10*sizeof(char); q-number=(char*)malloc(10*sizeof(char); q-sex=(char*)malloc(4*sizeof(char); q-classnum=(char*)malloc(10*sizeof(char); q-health=(char*)malloc(6*sizeof(char); scanf(%s%s%s%d%s%s,q-name,q-number,q-sex,&q-age,q-classnum,q-health); q-num
6、=i+1; p-next=q; p=q; p-next=L;void Ope(Linklist* L,int m) int i=1; Linklist *pre,*cur; cur=pre=L; while(cur-next!=cur) for(;inext; pre-next=cur-next; i=1; printf(%s %s %s %d %s %sn,cur-name,cur-number,cur-sex,cur-age,cur-classnum,cur-health); free(cur); cur=pre-next; printf(%s %s %s %d %s %sn,cur-na
7、me,cur-number,cur-sex,cur-age,cur-classnum,cur-health); free(cur); #include#include#include / malloc()等#include / INT_MAX等#include / EOF(=Z或F6),NULL#include / atoi()#include / eof()#include / floor(),ceil(),abs()#include / exit()#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASI
8、BLE -1typedef struct char name20; char num10; char sex3; int age; char clas10; char health20; struct node *next;ElemType;typedef struct LNode ElemType data; struct LNode *next;LNode,*LinkList;void Run(LinkList L,int m) LinkList p=L,q ; int j; if(m=1) for(q=p;q-next!=p;q=q-next) printf(%s %s %s %d %s
9、 %sn,q-data.name,q-data.num,q-data.sex,q-data.age,q-data.clas,q-data.health); printf(%s %s %s %d %s %sn,q-data.name,q-data.num,q-data.sex,q-data.age,q-data.clas,q-data.health); else while(p-next!=p) for(j=1;jnext; printf(%s %s %s %d %s %sn,p-data.name,p-data.num,p-data.sex,p-data.age,p-data.clas,p-d
10、ata.health); q-next = p-next; free(p); p = q-next; printf(%s %s %s %d %s %sn,p-data.name,p-data.num,p-data.sex,p-data.age,p-data.clas,p-data.health); void GetList(LinkList &L,int n) LinkList p,q; int i; L=(LinkList)malloc(sizeof(LNode); scanf(%s%s%s%d%s%s,L-data.name,L-data.num,L-data.sex,&(L-data.a
11、ge),L-data.clas,L-data.health); q = L; for(i=1;idata.name,p-data.num,p-data.sex,&(p-data.age),p-data.clas,p-data.health); q-next = p; q = p; q-next = L;int main() int i,j; scanf(%d%d,&j,&i); LinkList L; GetList(L,j); Run(L,i); return 0;二、试题查看标题:学生信息管理时 限:1000 ms内存限制:20000 K总时限:3000 ms描述:用链式存储结构实现对一个
12、班级学生信息管理。设计程序求出每个人的平均成绩并按平均成绩由高到底排序后输出学生记录。输入:人数n人员记录1 (格式为: 学号 姓名 成绩1 成绩2 成绩3)人员记录2输出:人员记录x 1人员记录y 2人员记录z n输入样例:31 孙俪莉 76 78 89 2 章子怡 72 56 67 3 刘德华 56 84 90输出样例:1 孙俪莉 76 78 89 81.00 13 刘德华 56 84 90 76.67 22 章子怡 72 56 67 65.00 3提示:来源:返回 #include#include#includetypedef int ElemType;typedef struct St
13、udent char num30; char name10; float score1; float score2; float score3; float average; struct Student *next; student,*stu;void CreatCList(stu L,ElemType n) stu p1; while(n 0) p1 = (stu)malloc(sizeof(student); scanf(%s,p1-num); scanf(%s,p1-name); scanf(%f,&p1-score1); scanf(%f,&p1-score2); scanf(%f,
14、&p1-score3); L-next = p1; L = p1; n -; L - next = NULL;void Average(stu L) stu h; h = L-next; while(h) h-average = (h-score1)+(h-score2)+(h-score3)/3; h = h-next; void List_Sort(stu L) stu p,q,r,s,l; l = L; p = L-next; while(p) r = p; q = p-next; while(q) if(r-average average) r = q; q = q-next; s =
15、 p; if(s-average=r-average & s-num=r-num) p = p-next; l-next = r; l = r; else while(s-next-num != r-num) s = s-next; s-next = r-next; l-next = r; l = r; l-next = NULL;void Traverse(stu L,ElemType n) ElemType i = 0; stu p; p = L-next; while(p) i +; if(i=n & n10) printf(%s %s %.2f %.2f %.2f %.2f %dn,p
16、-num,p-name,p-score1,p-score2,p-score3,p-average,i); else printf(%s %s %.2f %.2f %.2f %.2f %dn,p-num,p-name,p-score1,p-score2,p-score3,p-average,i); p = p-next; int main() ElemType n; stu L; L = (stu)malloc(sizeof(student); L-next = NULL; scanf(%d,&n); CreatCList(L,n); Average(L); List_Sort(L); Trav
17、erse(L,n); return 0;三、试题查看标题:顺序表上的基本操作实现时 限:1000 ms内存限制:10000 K总时限:3000 ms描述:在顺序存储结构实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算。输入:请输入线性表La的长度:na1 a2 a3 .an(数值有序,为降序)请输入要插入到线性表La中的数字x和插入的位置i:x i请输入要删除数字的位置:i请输入要查找的数字:x请输入线性表长度:mb1 b2.bm(数值有序,为升序)输出:创建好的线性表La=a1 a2.an插入一个数字后的线性表a1 a2.an+1删除一个数字后的线性表a1 a2.an查找一
18、个输入的数字后如果找到,输出该数字的位置i,如果没有找到,输出没有找到x的信息。逆置a1 a2.an后的线性表an an-1.a1合并两个线性表后的线性表输入样例:请输入线性表La的长度:5请输入线性表La中的元素:14 11 10 9 5请输入要插入到线性表La中的数字x和插入的位置i:8 4线性表La=14 11 10 8 9 5请输入要删除的数字的位置:4线性表La=14 11 10 9 5请输入要查找的数字:10找到,10在第3个位置逆置后的线性表La=5 9 10 11 14请输入线性表Lb的长度:4请输入线性表Lb中的元素:1 3 6 9合并La和Lb后的线性表为:1 3 5 6
19、9 9 10 11 14输出样例:提示:来源: #include#include#include / malloc()等#include / INT_MAX等#include / EOF(=Z或F6),NULL#include / atoi()#include / eof()#include / floor(),ceil(),abs()#include / exit()#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status; / Status是函数的类型,其值
20、是函数结果状态代码,如OK等typedef int ElemType;#define LIST_INIT_SIZE 5 / 线性表存储空间的初始分配量#define LISTINCREMENT 2 / 线性表存储空间的分配增量struct SqList ElemType *elem; / 存储空间基址 int length; / 当前长度 int listsize; / 当前分配的存储容量(以sizeof(ElemType)为单位);Status InitList(SqList &L) / 算法2.3 / 操作结果:构造一个空的顺序线性表 L.elem=(ElemType*)malloc(LI
21、ST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); / 存储分配失败 L.length=0; / 空表长度为0 L.listsize=LIST_INIT_SIZE; / 初始存储容量 return OK;Status DestroyList(SqList &L) / 初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L free(L.elem); L.elem=NULL; L.length=0; L.listsize=0; return OK; int ListLength(SqList L) / 初始条件:顺序线性表L已存
22、在。操作结果:返回L中数据元素个数 return L.length;Status GetElem(SqList L,int i,ElemType &e) / 初始条件:顺序线性表L已存在,1iListLength(L) / 操作结果:用e返回L中第i个数据元素的值 if(iL.length) exit(ERROR); e=*(L.elem+i-1); return OK;int LocateElem(SqList L,ElemType e,Status(*equal)(ElemType,ElemType) / 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为
23、0) / 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。 / 若这样的数据元素不存在,则返回值为0。算法2.6 ElemType *p; int i=1; / i的初值为第1个元素的位序 p=L.elem; / p的初值为第1个元素的存储位置 while(i=L.length&!equal(*p+,e) +i; if(i=L.length) return i; else return 0;Status ListInsert(SqList &L,int i,ElemType e) / 算法2.4 / 初始条件:顺序线性表L已存在,1iListLength(L)+1 /
24、操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 ElemType *newbase,*q,*p; if(iL.length+1) / i值不合法 return ERROR; if(L.length=L.listsize) / 当前存储空间已满,增加分配 if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType) exit(OVERFLOW); / 存储分配失败 L.elem=newbase; / 新基址 L.listsize+=LISTINCREMENT; / 增加存储容
25、量 q=L.elem+i-1; / q为插入位置 for(p=L.elem+L.length-1;p=q;-p) / 插入位置及之后的元素右移 *(p+1)=*p; *q=e; / 插入e +L.length; / 表长增1 return OK;Status ListDelete(SqList &L,int i,ElemType &e) / 算法2.5 / 初始条件:顺序线性表L已存在,1iListLength(L) / 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 ElemType *p,*q; if(iL.length) / i值不合法 return ERROR; p=L.elem+i-1; / p为被删除元素的位置 e=*p; / 被删除元素的值赋给e q=L.elem+L.length-1; / 表尾元素的位置 for(+p;p=1&j=Lb_len) GetElem(La,i,ai); GetElem(Lb,j,bj); if(ai=1) GetElem(La,i-,ai); ListInsert(Lc,+k,ai); while(j=Lb_len) / 表Lb非空且表La空 GetElem(Lb,j+,bj); ListInsert(Lc,+k,bj); Status equal(ElemType c1,ElemType
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1