1.
// main.c
#include <stdio.h>
#include <stdlib.h>
#include "head.h"
#define N 8
#define M 4
int main(int argc,const char *argv[])
{
LoopLink L = loop_create();
if (NULL == L)
{
printf("创建失败\n");
return -1;
}
for (int i = 2; i <= N; i++)
{
loop_add(L,i);
}
loop_show(L);
putchar(10);
LoopLink p = L;
while (p){
p = loop_out(p,M);
}
L = NULL;
putchar(10);
return 0;
}
// head.h
#ifndef __HEAD_H__
#define __HEAD_H__
typedef struct Node
{
union
{
int len;
int data;
};
struct Node *next;
}Node,*LoopLink;
LoopLink loop_create();
void loop_add(LoopLink L,int data);
LoopLink loop_out(LoopLink L,int n);
void loop_show(LoopLink L);
#endif
// head.c
#include<stdio.h>
#include<stdlib.h>
#include"head.h"
LoopLink loop_create()
{
LoopLink L = (LoopLink)malloc(sizeof(Node));
if(NULL == L)
{
printf("创建失败\n");
return NULL;
}
L->next = L;
L->data = 1;
return L;
}
void loop_show(LoopLink L)
{
LoopLink p = L;
if(NULL == L || NULL == p)
{
printf("show失败\n");
return;
}
do
{
printf("%d ",p->data);
p = p->next;
}while (p != L);
}
void loop_add(LoopLink L,int data)
{
LoopLink p = (LoopLink)malloc(sizeof(Node));
if(NULL == L || NULL == p)
{
printf("add失败\n");
return;
}
p->data = data;
p->next = L;
LoopLink q = L;
while (q->next != L)
{
q = q->next;
}
q->next = p;
}
LoopLink loop_out(LoopLink L,int n)
{
if (L == NULL)
{
printf("out失败\n");
return NULL;
}
if(L->next == L)
{
printf("%d ",L->data);
return NULL;
}
for (int i = 0; i < n-2; i++)
{
L = L->next;
}
LoopLink p = L->next;
L->next = p->next;
printf("%d ",p->data);
free(p);
return L->next;
}