约瑟夫环问题的程序
来源:互联网 发布:织梦tag标签不存在 编辑:程序博客网 时间:2024/05/22 09:00
#include <stdio.h>
#include <stdlib.h>
typedef struct lnode
{
int data;
int code;
struct lnode* next;
}lnode, * list;
///////////////////////////////////////////////////////////////////////////////
//辅助函数
lnode* CreateNode()
{
lnode* p = (lnode*) malloc (sizeof(lnode));
if (!p)
{
exit(0);
}
return p;
}
void DestoryNode(lnode* p)
{
free(p);
}
list ListInsertFront(list l)
{
lnode *p = CreateNode();
p->next = l;
return p;
}
lnode* ListRemoveNext(list prev)
{
lnode* p = prev->next;
prev->next = p->next;
return p;
}
///////////////////////////////////////////////////////////////////////////////
// 创建过程
list CreateRingQueue(int nCount)
{
list tail, l= CreateNode();
l->data = 1;
l->code = nCount;
tail = l;
//printf("创建第0个,编号为%d, 自己在%pn",l->code, l);
for(int i = 1; i < nCount; i++)
{
l = ListInsertFront(l);
l->code = nCount - i;
l->data = 0;
//printf("创建第%d个,编号为%d, 自己在%p, 下一个是%pn", i, l->code, l, l->next);
}
tail->next = l; //环形表
return l;
}
//输入过程
void InitRingQueue(list l, int nCount)
{
list begin = l;
int j = 0;
while( j != nCount)
{
printf("输入第%d个的参数", j + 1);
scanf("%d", &begin->data);
if(begin->data > 0)
{
begin = begin->next;
j++;
}
}
}
//删除过程
list RemoveFromQueue(list l, int nIdx)
{
list begin = l, end = l->next;
int idx = nIdx;
while(begin != end)
{
//printf("从第%d个开始查找第%d个n", begin->code, idx);
//查找第n-1个,
for(int i = 0; i < idx; i++)
{
//printf("从第%d个编号为%dn", i, begin->code);
begin = begin->next;
}
//删除第n个
lnode * p = ListRemoveNext(begin);
//取出下一次的n值
idx = p->data;
DestoryNode(p);
end = begin->next;
}
return begin;
}
int main()
{
int n = 0;
printf("输入链表长度");
scanf("%d", &n);
if( n <= 0)
{
return 0;
}
list l = CreateRingQueue(n);
InitRingQueue(l, n);
lnode * last = RemoveFromQueue(l, 3);
printf("last is %d, data is %d", last->code, last->data);
return 0;
}
- 约瑟夫环问题的程序
- 约瑟夫环的问题
- 约瑟夫环的问题
- 约瑟夫环的问题
- 约瑟夫环的问题
- 约瑟夫环的问题
- 约瑟夫环的问题
- 约瑟夫环的问题
- 小程序(十一)约瑟夫环的问题
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题的笨方法求解程序
- Java程序练习-约瑟夫环问题
- 约瑟夫环问题求解--程序+详细注解
- java简单入门程序--约瑟夫环问题
- 约瑟夫问题程序实现
- 约瑟夫问题pascal程序
- 约瑟夫环问题的实现
- 关于约瑟夫环的问题
- 体面的辞职信(搞笑版)
- 给老婆的一封信(爆笑)N長。
- 递归的简单解释
- 答初学者的几个问题
- 数列求和的算法和优化的故事
- 约瑟夫环问题的程序
- 使用xmlhttp 实现多文件上传
- 电话薄程序的雏型
- 两个字符串操作函数.
- 《大内密探零零发》:古装武侠片加上外星科幻片再加上无厘头搞笑片
- 字符变换(好像是二级的题)?
- "系统化思维导论"读后的思考与笔记-第二章-方法
- 模糊的C代码-考验你的C功底和大脑细胞数
- PowerBuilder方式下图像存储功能的研究