一.头文件linkapp.h
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}listnode,*linklist;
extern void list_jose(linklist H,int k,int m);
extern linklist list_creat();
extern void list_show(linklist H);
#endif
二.函数实现linkapp.c
#include "linkapp.h"
linklist list_creat()
{
linklist H,r,p;
int n,i;
loop:
printf("please input n:");
scanf("%d",&n);
if(n < 0)
{
printf("n > 0\n");
goto loop;
}
if((H = (linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc failed\n");
return NULL;
}
H->data = 1;
H->next = H;
r = H;
for(i = 2;i <= n;i++)
{
if((p = (linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc failed\n");
return NULL;
}
p ->data = i;
r -> next =p;
r = p;
}
p -> next =H;
return H;
}
void list_show(linklist H)
{
linklist p = H;
while(p->next != H)
{
printf("%d ",p->data);
p = p->next;
}
printf("%d\n",p->data);
}
void list_jose(linklist H,int k,int m)
{
int i;
linklist r,p;
r = H;
while(r->next->data != k)
{
r = r->next;
}
printf("k=%d\n",k);
while(r->next != r)
{
for(i = 0;i < m -1;i++)
{
r = r->next;
}
p = r->next;
r->next = p->next;
printf("%d\n",p->data);
free(p);
p = NULL;
}
printf("%d\n",r->data);
free(r);
r = NULL;
}
三.makefile文件代码实现
CC= gcc
CFLAGS = -O0 -c -Wall -g
test:linkapp.o test.o
.PHONY:clean
clean:
rm *.o test