p2->next=p1; }
p1->next=head; return(head); }
int josephus(Linklist josephus,int s,int m) {
Linklist p,pre; int count; if(!josephus) {
printf(\表中无元素\ return(0); }
p=josephus;
for(count=1;count
p=p->next; }
printf(\输出约瑟夫序列:\\n\ while(p!=p->next) {
pre=p->next;
while(pre->next!=p) {pre=pre->next;} for(count=1;count pre=p; p=p->next; } printf(\ pre->next=p->next; free(p); p=pre->next; } printf(\ free(p); return(1); } int main() { Linklist PL; int s,m,n,i; printf(\请输入圆桌的人数,起始位置,间隔\ scanf(\ PL=create(s); /* for(i=0;i printf(\ PL=PL->next; } */ josephus(PL,m,n); return(1); } 静态链表:#include \ #include \#define MAXSIZE 100 typedef struct{ int data; int next; }SNode; typedef struct{ SNode sp[MAXSIZE]; int SL; }StList,*PStList; PStList Init(int n) { int i; //设置游标 PStList PL; PL=(PStList)malloc(sizeof(StList)); if(PL) {PL->SL=0;} for(i=0;i PL->sp[i].next=i+1; PL->sp[i].data=i; } PL->sp[n-1].next=0; PL->sp[n-1].data=n; return(PL); } void josephus(PStList p,int s,int m,int n) { int i,s1,h,j; printf(\输出约瑟夫序列:\\n\ s1=s-1; for(i=n;i>1;i--) { for(j=1;j s1=p->sp[s1].next; printf(\ p->sp[h].next=p->sp[s1].next; } s1 = p->sp[s1].next; printf(\} int main() { int s,m,n; printf(\请输入人数:\\n\ scanf(\ printf(\请输入起始位置和间隔:\\n\ scanf(\ PStList PL; PL= Init(n); josephus(PL,s,m,n); return(0); } 心得体会:通过这次的是实验我可以基本掌握线性表的两类存储结构(顺序存储结构和链式存储结构)的描述方法。掌握在各种链表结构中实现查找、插入、删除操作的基本方法,掌握在顺序结构中实现查找、插入、删除操作的基本方法。并且将这些方法运用到实际的约瑟夫问题中,难点在于对约瑟夫算法的理解,在实验中因为未能深刻理解约瑟夫算法出过很多小问题使得输出的约瑟夫序列不正确。 实验二:数制转换算法实现 1、实验目的 1)掌握栈、队列的两类存储结构(顺序存储结构和链式存储结构)的描述方法。 2)掌握在不同结构中实现基本操作的基本方法。 3)掌握在两种结构中实现查找、插入、删除操作的基本方法 2、实验内容 编写算法实现任意一个十进制数转换r进制数。 3、实验要求 针对实验内容,认真设计算法,上机过程中,能够熟练运用高级语言的程序调试器DEBUG调试程序,上机后,认真整理源程序及其注释,完成实验报告(包括算法、源程序、实验结果、算法分析等) 源程序1(顺序结构): #include int data[maxsize]; int top; }seqstack,*Pseqstack; typedef struct { int data[maxsize]; int rear,front; }seqqueue,*Pseqqueue; 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据结构实验报告(全)安工大(2)在线全文阅读。
相关推荐: