linklist_xh.c

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

#include "linklist_xh.h"

loopLinkList* create_loopLinkList(void)
{
	loopLinkList* head = (loopLinkList*)malloc(sizeof(loopLinkList));
	if(NULL == head)
	{
		printf("头结点申请失败!\n");
		return NULL;
	}
	head->text.len = 0;
	head->next = head;

	return head;

}

//头插法
int  insertHead_looplinlist(loopLinkList *head,dataType num)
{
	//创建一个新结点
	loopLinkList* temp = (loopLinkList*)malloc(sizeof(loopLinkList));
	if(NULL == temp)
	{
		printf("创建失败!\n");
		return 0;
	}
	temp->text.data = num;
	temp->next = NULL;

	//头插法插入数据
	
	temp->next = head->next;
	head->next = temp;
	head->text.len++;



	return 0;
}

//遍历链表

void show_looplinklist(loopLinkList* head)
	
{
	loopLinkList *p = head;
	while(p->next != head)
	{
		p = p->next;
		printf("%d ",p->text.data);
	}
	printf("\n");
	//更新头结点中记录的链表长度
	head->text.len++;

	return;
}

//尾插法
int insertTail_looplinlist(loopLinkList* head,dataType num)
{
	loopLinkList* temp = (loopLinkList*)malloc(sizeof(loopLinkList));

	if(NULL == temp)
	{
		printf("创建失败!\n");
		return 0;
	}

	//初始化新结点
	temp->text.data = num;
	temp->next = NULL;

	loopLinkList* p = head;
	while(p->next != head)
	{
		p = p->next;
	}
	p->next = temp;
	temp->next = head;

	head->text.len++;
	return 0;
}
//判空
int isEmpty_looplinlist(loopLinkList* head)
{
	return head->next == NULL?1:0;
}
//头删
dataType delHead_looplinlist(loopLinkList* head)
{
	if(isEmpty_looplinlist(head))
	{
		printf("链表为空!");
		return (dataType)0;
	}
 
	loopLinkList* temp = head->next;
	head->next = head->next->next;
 
	dataType num = temp->text.data;
	free(temp);
	temp = NULL;
 
	head->text.len--;
	return num;
}
 
//尾删
dataType delTail_looplinlist(loopLinkList* head)
{
	if(isEmpty_looplinlist(head))
	{
		printf("链表为空!");
		return (dataType)0;
	}
	loopLinkList* p = head;
	loopLinkList* temp;
	while(p->next != head)   
	{
		temp = p;
		p = p->next;
	}
	temp->next=temp->next->next;
	free(p);    
	p = NULL;   
 
	head->text.len--;
	return 0;
 
}
 
 
//按位置插入
void insert_location_looplinlist(loopLinkList *head,dataType index,dataType num)
{
	if(index<1 || index >head->text.len+1)
	{
		printf("位置非法!");
		return;
	}
	int i;
	loopLinkList* temp=head;
	loopLinkList* p = (loopLinkList*)malloc(sizeof(loopLinkList));
	if(NULL == p)
	{
		printf("插入失败!\n");
		return ;
	}
 
 
	//初始化新结点
	
	p->text.data = num;
	p->next = NULL;
 
	for(i=0;i<index-1;i++)
	{
		temp = temp->next;
	}
	p->next = temp->next;
	temp->next = p;
 
	head->text.len++;
	return;
 
}
 
//按位置删除
void del_location_looplinlist(loopLinkList* head,dataType index)
{
	if(isEmpty_looplinlist(head))
	{
		printf("链表为空!");
		return;
	}
	loopLinkList* temp = head;
 
	for(int i=0;i<index-1;i++)
	{
		temp = temp->next;
	}
	loopLinkList* p = temp->next;
	temp->next = temp->next->next;
 
	free(p);
	p = NULL;
 
	head->text.len--;
	return;
 
}
 
//按位置查找
void find_location_looplinlist(loopLinkList* head,dataType index)
{
	loopLinkList* temp = head;
 
	for(int i=0;i<index;i++)
	{
		temp = temp->next;
	}
	printf("%d",temp->text.data);
 
	head->text.len++;
 	printf("\n");
	return;
 
	
}

main_xh.c

#include <stdio.h>
#include <stdlib.h>
#include "linklist_xh.h"
int main(int argc, const char *argv[])
{
	loopLinkList* head = create_loopLinkList();
/*	insertHead_looplinlist(head,12);
	insertHead_looplinlist(head,22);
	insertHead_looplinlist(head,32);
	insertHead_looplinlist(head,42);

	show_looplinklist(head);
	insertTail_looplinlist(head,111);
	insertTail_looplinlist(head,222);
	insertTail_looplinlist(head,333);
	show_looplinklist(head);
*/
/*
	delHead_looplinlist(head);
	show_looplinklist(head);

	delTail_looplinlist(head);
	show_looplinklist(head);
*/
/*	insert_location_looplinlist(head,2,2222);
	show_looplinklist(head);

	del_location_looplinlist(head,8);
	show_looplinklist(head);
	
	find_location_looplinlist(head,2);

*/
	loopLinkList* head = (loopLinkList*)malloc(sizeof(loopLinkList));
	head->data = 1;
	head->next = head;

	node* current = head; 
	for (int i = 8; i >= 1; i--) {
		loopLinkList* newNode = (loopLinkList*)malloc(sizeof(loopLinkList));
		newNode->text.data = i;
		newNode->next = head->next;
		head->next = newNode;
	}
	int m = 4; // 每次数的节点数
	int n = 8; // 初始节点个数
	joseph(head);

	return 0;
}

linllist_xh.h

#ifndef __LOOP_LINK_LIST__
#define __LOOP_LINK_LIST__

typedef int dataType;

union msg{

	dataType data;
	int len;
};
typedef struct node
{
	struct node* next;
	union msg text;
}loopLinkList;

loopLinkList* create_loopLinkList(void);
int  insertHead_looplinlist(loopLinkList *head,dataType num);
void show_looplinklist(loopLinkList* head);
int insertTail_looplinlist(loopLinkList* head,dataType num);
dataType delHead_looplinlist(loopLinkList* head);
dataType delTail_looplinlist(loopLinkList* head);
void insert_location_looplinlist(loopLinkList *head,dataType index,dataType num);
void del_location_looplinlist(loopLinkList* head,dataType index);
void find_location_looplinlist(loopLinkList* head,dataType index);
void joseph(loopLinkList* head);



#endif
02-22 14:00