当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > C语言 > 正文 |
|
|||
约瑟夫环C语言实现源代码 | |||
2010-3-24 9:06:58 文/xiaobao 出处:电脑软硬件应用网 | |||
前天笔试有个约瑟夫环的问题,怪不得人家没通知我面试,原来我的约瑟夫环做的确实有问题,昨天晚上又重新做了下,下面上源代码: /* file:osephu.cpp author:www.5dkx.com */ #include <iostream> using namespace std; typedef struct Node{ int sort; struct Node *next; }Link,*List; int Init(List *p); //初始化双链表 int Insert(List *p,int key); //插入节点 void Print(List p); //打印双链表 void CreateOsep(List p,int n); //初始化约瑟夫环void osehup(List p,int m,int len,List Re); //计算约瑟夫环出列顺序,并存放在Re链表中 int main() { int m,n; List p,Re; Init(&p); Init(&Re); cout<<"输入环大小: "; cin>>n; cout<<"输入地几个人出列: "; cin>>m; CreateOsep(p,n); cout<<"输入为: "<<endl; Print(p); osehup(p,m,n,Re); cout<<"出队顺序为:"<<endl; Print(Re); return 1; } //初始化 int Init(List *p) { *p = (List)malloc(sizeof(Link)); if(!(*p)) { cout<<"初始化失败!"<<endl; return 0; } else { (*p)->next=*p; //(*p)->sort=1; } return 1; } //插入节点 int Insert(List *p,int key) { List tmp = (List)malloc(sizeof(Link)); if(!tmp) { cout<<"创建节点失败!"<<endl; return 0; } else { tmp->sort=key; tmp->next=(*p)->next; (*p)->next=tmp; *p=tmp; } return 1; } //创建约瑟夫环 void CreateOsep(List p,int n) { List tmp=p; tmp->sort=1; for(int i=2;i<=n;i++) Insert(&tmp,i); } //约瑟夫环算法 void osehup(List p,int m,int len,List Re) { int count=0; int allc=0; List tmp1=p; List tmp2=Re; List temp; while(allc<len) { count++; if(count == m) { temp = tmp1->next; if(allc==0) //如果是第一次出列 tmp2->sort=temp->sort; else Insert(&tmp2,temp->sort); tmp1->next=tmp1->next->next; // cout<<temp->sort<<" "; free(temp); temp=NULL; allc++; count=0; } else { tmp1=tmp1->next; } } cout<<endl; } //打印链表 void Print(List p) { List tmp=p->next; cout<<p->sort<<" "; while(tmp!=p) { cout<<tmp->sort<<" "; tmp=tmp->next; } cout<<endl; } 运行后效果为: 输入环大小: 5 输入地几个人出列: 6 输入为: 1 2 3 4 5 出队顺序为: 2 4 3 1 5 Press any key to continue |
|||
最新热点 | 最新推荐 | 相关文章 | ||
用C语言实现的闹钟程序 C#实现Windows关机的代码 用动态规划法求组和数的算法 循环结构程序具有哪3个组成部分? const成员函数有什么特点? c语言求平均分程序 一道关于指针的C语言题 C语言求3个整数的最大公约数 BM模式匹配算法C语言实现 从键盘输入任意5个4位整数存入数组a… |
关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 | |
Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号 |