조세 프 링 데이터 구조

16702 단어 데이터 구조
/ 번 호 는 1, 2, n 의 n 명 이 시계 방향 으로 한 바퀴 돌 고 각자 비밀번호 (정수) 를 가지 고 있 습 니 다.처음에 하나의 정 수 를 번호 상한 치 m 로 선택 하고 첫 번 째 사람 부터 시계 방향 으로 1 부터 순서대로 번 호 를 매기 고 m 에 도착 할 때 번 호 를 정지 합 니 다.m 를 알 리 는 사람 이 열 을 내 고 그의 비밀 번 호 를 새로운 m 값 으로 한다. 그 가 시계 방향 에 있 는 다음 사람 부터 다시 1 번 숫자 를 알 리 기 시작한다. 이렇게 하면 모든 사람 이 열 을 낼 때 까지.함 수 를 시험 적 으로 설계 하여 열 순 서 를 출력 할 수 있 습 니 다.요구: 1. 선형 표를 사용 하여 이 루어 집 니 다. 2 함수 입력 매개 변 수 는 n 개인 암호 의 배열, n 의 값, m 의 초기 값, 출력 매개 변 수 는 배열 배열 배열 입 니 다.
#define MAXSIZE 9999
typedef struct node{
int number;
int  code;
struct node *piror;
struct node *next;
} *DLnode,DLinklist;     //        
DLnode creat_Linklist(int n,int array_code[]);
int *joseph_circle(DLnode head,int n,int m);
#include
#include
DLnode creat_DLinklist(int n,int array_code[])
{
 int i;
 DLnode tail;
 DLnode head =(DLnode)malloc(sizeof(node));
 head->next= head;
 head->number=1;
 head->code=array_code[0];
 tail=head;                      //     
 for(i=2;i<=n;i++)
 {
  DLnode p=(DLnode)malloc(sizeof(node));
  p->number=i;
  p->code=array_code[i-1];
  p->next=tail->next;
  tail->next=p;
  p->piror=tail;
  tail=p;
  head->piror=tail;       //    
 }
    return (head);                       
}
int *joseph_circle(DLnode head,int n,int m)
{
    int i,j;
    j=0;
   static int out_sequence[MAXSIZE];       
    out_sequence[MAXSIZE]={0};           //       
    DLnode p;
    while(head->next!=head){
    p=head;
    for(i=0;i<m;i++)            
    p=p->next;                        //     m    
    out_sequence[j]= p->number;
    j++;
    m=p->code;
    p->next->piror=p->piror;
    p->piror->next=p->next;           //     m   
    if(p==head)                      
    head=p->next;                     //        ,       
    free(p);
    }
    out_sequence[j] =head->number; 
return (out_sequence);             
}
int main()
{
    int i,n,m;
    int array_code[MAXSIZE];
    DLnode head;  
    int *r;                               //        
    while(1){
    printf("please input n: ");
    scanf("%d",&n);
    printf("please input code arry: ");
    for(i=0;i<n;i++)
    scanf("%d",&array_code[i]);
    printf("please input m: ");
    scanf("%d",&m);
    head=creat_DLinklist(n,array_code);
    printf("out sequence: ");
    r=joseph_circle(head ,n, m);          
    for(i=0;i<n;i++)
    printf("%d ",*(r+i));
    printf("
"
); array_code[MAXSIZE]={0}; // array_code } return 0; }

좋은 웹페이지 즐겨찾기