本帖最后由 zyz 于 2017-11-22 21:14 编辑
是西电2016和2017年计算机科学与技术专业的考研题,约瑟夫问题,能单步调试得到正确结果,试卷挖了几个空,题目中pNode removeNode(pNode currentNode)函数中free()函数是没有注释的
经过测试问题出在pNode removeNode(pNode currentNode)请大佬们分析一下这个函数,尤其是free那里
[C++] 纯文本查看 复制代码 #include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int id;
struct node *next;
struct node *pre;
}Node, *pNode;
pNode RingConstruct(int n){
int i;
pNode head,p,q;
head=(pNode)malloc(sizeof(Node));
head->id=1;
p=head;
for(i=2;i<=n;i++){
q=(pNode)malloc(sizeof(pNode));
q->id=i;
p->next=q;
q->pre=p;
p=q;
}
p->next=head;
head->pre=p;
return head;
}
int boundMachine(int order)
{
int boundlist[4]={3,7,11,19};
return boundlist[(order-1)%4];
}
pNode count(pNode first,int bound){
pNode q=first;
for(int i=2;i<=bound;i++)
q=q->next;
return q;
}
pNode removeNode(pNode currentNode){
pNode first=currentNode->next;
pNode p=currentNode;
while(currentNode !=p->next) p=p->next;
p->next=first;
first->pre=p;
printf("%d->",currentNode->id);
//free(currentNode);
return first;
}
int main()
{
pNode first,toRemove;
int i;
first=RingConstruct(20);
for(i=1;i<=20;i++){
toRemove=count(first,boundMachine(i));
first=removeNode(toRemove);
}
return 0;
}
|