现在的位置: 首页 > 综合 > 正文

出圈问题的代码

2013年02月20日 ⁄ 综合 ⁄ 共 1522字 ⁄ 字号 评论关闭

前几天没事,学习循环链表时候写的关于出圈问题的代码~~~~

所谓出圈问题是指N个人排成一圈,然后报数,谁报到指定的数字,然后“出圈”,也就是从链表里删除,然后再从一开始报数,知道剩下最后一个为止,然后输出这个数。

#include<stdio.h>
#include<stdlib.h>

typedef struct Node{
 int value;
 struct Node *next;
}NODE;
void initcir(NODE *header);
void outputscir(NODE *header);
void calculatecir(NODE *header,int value);
int main()
{
 NODE *header=NULL;
 header=(NODE*)malloc(sizeof(NODE));
 header->value=0;
 header->next=NULL;
 int i=1;
 initcir(header);
  //  outputscir(header);
 calculatecir(header,3);
 freecir(&header);
 return 1;
}

void initcir(NODE *header)
{
 NODE * header_point=header;
 int i;
    for(i=1;i<11;i++){
  NODE *node=(NODE*)malloc(sizeof(NODE));
  node->value=i;
  node->next=NULL;
  header_point->next=node;
  header_point=header_point->next;
 }
 header_point->next=header; 
}

void freecir(NODE **header)
{
 NODE * header_point=*header;
 while(header_point->next !=)
}

void outputscir(NODE *header)
{
 NODE * temp_point=header->next;
 printf("outputs begin:/n");
 while(temp_point != header){
  printf("*******value:%d/n",temp_point->value);    
  temp_point=temp_point->next;
 }
 printf("outputs end/n");
}

void calculatecir(NODE *header,int value)
{
 printf("*******value:%d/n",value);
 NODE * temp_point=header;
 NODE * node=NULL; 
 int i=1;
 while(header->next->next!=header){
  if(temp_point==header){
   node=temp_point;
   temp_point=temp_point->next; 
  }
  if(i<value){
   node=temp_point;   
   temp_point=temp_point->next; 
   i++;  
  }
  else{
    node->next=temp_point->next;
    temp_point->next=NULL;
    free(temp_point);
    temp_point=node->next; 
    i=1; 
   }
 }
 printf(" the lastone :%d/n",header->next->value);
}

抱歉!评论已关闭.