(C语言)用静态链表求解约瑟夫问题。

 我来答
544256444
2012-03-05 · TA获得超过200个赞
知道答主
回答量:202
采纳率:0%
帮助的人:122万
展开全部
#include "stdio.h"
// #include "conio.h"
#include "stdlib.h"
#define MAX 100
typedef struct nodes
{
int data;
nodes* next;
}Lnode; /*静态链表节点结构体定义 */

// typedef struct list
// {
// Lnode node[MAX];
// int head;
// }List,*PList;

void InitList(Lnode* pHead,int n)/*n为节点数 */
{
pHead->data = 0;
Lnode* pPre = pHead;
for(int i=1; i<n; ++i)
{
Lnode *pTemp = (Lnode*)malloc(sizeof(Lnode));
pTemp->data = i;
pPre->next = pTemp;
pPre = pTemp;

if (i == n-1)
{
pTemp ->next = pHead;
}
}
}

void Searchnode(Lnode *pHead, int n)/*m为报数,n为节点数,start为初始报数序号*/
{
Lnode* pNext = pHead;
Lnode* pPreNode = NULL;
while (1)
{
for(int i=0; i< n; ++i)
{
pPreNode = pNext;
pNext = pNext->next;
}

printf("delete: %d\n",pNext->data);
if (pPreNode->next == pNext->next)
{
break;
}

pPreNode->next = pNext->next;
free((void *)pNext);
pNext = pPreNode->next;
}
}

void main()
{
int i;
int n=10,start=1;

Lnode* pHeadNode = (Lnode*)malloc(sizeof(Lnode));
InitList(pHeadNode, n);

Lnode* pNext = pHeadNode;
for (i=0;i<10; ++i)
{
printf("%d\n", pNext->data);
pNext = pNext->next;
}

printf("请输入一个数\n");
scanf("%d", &n);
n %= 10;
Searchnode(pHeadNode, n);
getchar();
// printf("Hello, world\n");
}
更多追问追答
追问
静态链表是为了在那些没有指针类型的高级语言中继续使用链式结构而设计的,静态链表的指针是结点的数组下标。先定义一个结构体记录:
typedef struct {
DataType data; /*元素*/
int next; /*相对指针*/
}SNode;
再定义一个静态链表:
#define maxsize 100
typedef struct {
SNode sp[maxsize];
int SL; /*静态链表头指针*/
}StList,*PSList;
如果按这个做怎么实现?
追答
数组和指针还不是一样的东西,换一下就可以啦。照样做咯。例如int a[100]; 可以给首地址给指针int *p = a;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式