데이터 구조 - 조세 프 링 (순환 링크)

1831 단어 데이터 구조
n 개의 데이터 요 소 는 하나의 링 을 구성 하고 링 의 임 의 위치 에서 계산 을 시작 하여 m 까지 이 요 소 를 표 에서 꺼 내 고 상기 과정 을 반복 하 며 표 에 하나의 요소 만 남 을 때 까지 계산 합 니 다.알림: 머리 가 없 는 순환 단일 체인 시트 로 n 개 요소 의 저장 을 실현 합 니 다.
샘플: 입력: 1031 / / 는 각각 총수 이 고 열 거 된 인원 이 도착 한 숫자 이 며 시작 한 사람의 번호 입 니 다.출력: 3, 6, 9, 2, 7, 1, 8, 5, 104 / / 열 거 된 선착순 으로 열 거 된 사람의 번호 입 니 다.
#include
#include
#define ERROR 0
#define OK 1
typedef  int ElemType; /*        */
typedef struct LNode   /*         */
{
    ElemType data;
    struct LNode *next;
} LNode,*LinkList;

LinkList Creat(int t)
{
    int n;
    LinkList p1,p2,head;
    p1=(LinkList)malloc(sizeof(LNode));
    p2=(LinkList)malloc(sizeof(LNode));
    head = NULL;
    n = 1;
    while(n<=t)
    {
        p1->data = n;
        if(n==1)
            head = p1;
        else
            p2->next = p1;
        p2 = p1;
        if(n!=t)
            p1 = (LinkList)malloc(sizeof(LNode));
        n++;
    }
    p2->next = head;
    return head;

}
LinkList Start(LinkList L,int k)
{
    int i;
    i=1;
    while(i!=k)
    {
        L=L->next;
        i++;
    }
    return L;

}
LinkList Delete(int n,int m,LinkList L)
{
    int i,j,k;
    LinkList p;
    p=L;
    k=0;
    while(n>1)
    {
        j=0;
        for(i=1+k; i<=n; i++)
        {
            if((i+1)%m==0)
            {
                printf("%d ",p->next->data);
                p->next=p->next->next;
                i++;
                j++;

            }
            p=p->next;
            k=i%m;
        }
        n=n-j;
    }
    printf("%d
",p->data); return p; } int main() { int m,n,k; scanf("%d%d%d",&n,&m,&k); LinkList L,cur; L=Creat(n); cur=Start(L,k); Delete(n,m,cur); return 0; }

좋은 웹페이지 즐겨찾기