主题:[原创]约瑟夫环-我的第一个数据结构实验(好激动啊~)
wksuper
[专家分:660] 发布于 2006-03-12 23:40:00
#include <iostream>
using namespace std;
typedef struct LNode
{
int num,pwd;
struct LNode *next;
}LNode,*LinkList;
int main()
{
int i,j,m,n; //m为报数上限,n为人数。
cout<<"Please enter n=";
if(!(cin>>n)) {cout<<"ERROR:That's not a number!";return -1;}
cout<<"Please enter m=";
if(!(cin>>m)) {cout<<"ERROR:That's not a number!";return -2;}
LinkList head,tail,p,q; //head为头结点指针,tail为尾结点
//指针,p为当前指针的前一指针,q
//当前指针。
head=new LNode;
p=head;
for(i=1;i<n;i++)
{
q=new LNode;
p->next=q;
p=q;
}
tail=q;
tail->next=head; //建立n个结点的循环链表。
p=head;
for(i=1;i<=n;i++)
{
p->num=i;
cout<<"Please enter No."<<i<<"'s password:";
cin>>p->pwd;
p=p->next;
} //输入密码。
cout<<"result:";
p=tail;
for(i=1;i<=n;i++)
{
for(j=1;j<m;j++) p=p->next;
q=p->next;
m=q->pwd;
cout<<" "<<q->num;
p->next=q->next;
delete q;
} //输出编号。
return 0;
}
回复列表 (共20个回复)
沙发
我是一片叶子 [专家分:210] 发布于 2005-11-11 13:44:00
老兄好厉害!佩服!
板凳
houfaqing [专家分:2610] 发布于 2005-11-11 21:23:00
呵呵加油加油,继续努力啊[em2]
3 楼
mylove160 [专家分:120] 发布于 2005-11-11 21:46:00
再完善一下,加上M和N的输入判断
4 楼
峩菂ㄝ界﹖ [专家分:11300] 发布于 2005-11-11 23:05:00
楼主继续,把程序完成
5 楼
wksuper [专家分:660] 发布于 2005-11-15 22:27:00
请教怎么编写m、n的输入判断?
6 楼
wksuper [专家分:660] 发布于 2005-11-15 22:38:00
如果用cin的话 都输进去了 要怎么判断呢?
7 楼
wksuper [专家分:660] 发布于 2005-11-15 22:40:00
难道先getchar() 得到的值判断一下再赋给m、n? 要如何实现?
8 楼
dvdface [专家分:140] 发布于 2005-11-20 23:36:00
/*
version 1.0
coder dvdface
date 2005.11.14
sqlist
*/
#include <iostream.h>
#define n0 100
#define datatype int
struct sqlist{
datatype v[n0+1];
int n;
};
int init(sqlist &L)
{
L.n = 0;
return 0;
}
int ins(sqlist &L,
int i,
datatype x)
{
if((i>n0)||(i<1)||(L.n>=n0)||(i>L.n+1))
return -1;
for(int j=L.n;j>=i;j--)
L.v[j+1] = L.v[j];
L.v[i]=x;
L.n++;
return 0;
}
int del(sqlist &L,int i)
{
if(i<1 || i>L.n)
return -1;
for(int j=i;j<L.n;j++)
L.v[j] = L.v[j+1];
L.n--;
return 0;
}
int prt(sqlist L)
{
if(L.n<1)
return -1;
for(int i=1;i<=L.n;i++)
cout<<L.v[i]<<" ";
cout<<endl;
return 0;
}
int joseph(sqlist &L,int m)
{
if(m<0)
return -1;
cout<<"Joseph : ";
for(int i=1;L.n!=0;)
{
i = (i+m-1) % L.n;
if(i==0)
i=L.n;
cout<<L.v[i]<<" ";
del(L,i);
}
cout<<endl;
return 0;
}
int main()
{
sqlist list;
init(list);
ins(list,1,1);
ins(list,2,2);
ins(list,3,3);
ins(list,4,4);
ins(list,5,5);
ins(list,6,6);
ins(list,7,7);
ins(list,8,8);
prt(list);
joseph(list,4);
return 0;
}
9 楼
qinqgq123 [专家分:100] 发布于 2006-01-01 17:03:00
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
typedef struct
{
int *elem;
int length;
int listsize;
}SList;
SList L;
int n;
//--------------------------------void Joseph(int m)-----------------------//
void Joseph(int m) {
int p,k,t;
p=0; //记录零元个数
k=0;
t=0; //记录被删除元素的下一个元素
while(p<n){ //当所有元素为零时退出
while(k<m){
if(L.elem[t])k++;
t=(t+1)%n;
}
m=L.elem[(t+n-1)%n];
L.elem[(t+n-1)%n]=0; //将挑出的元素赋为零
k=0;
printf("%d\t",(t+n-1)%n+1);
p++;
}
}//------------------------------------------------------------------------//
void main()
{
int i,m;
printf("输入线性表长度: n=");
scanf("%d",&n);
if(n>LIST_INIT_SIZE)
{
printf("OVERFLOW!!");
exit(0);
}
L.elem=malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)
{
printf("malloc fail!");
exit(0);
}
L.length=n;
L.listsize=LIST_INIT_SIZE;
printf("输入 %d 个数:\n",n);
for(i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
printf("\n输入第一个报数号码:m=");
scanf("%d",&m);
printf("\n出队顺序为:\n");
Joseph(m);
}
10 楼
qinqgq123 [专家分:100] 发布于 2006-01-01 17:10:00
不知这个程序怎么样
我来回复