游标:循环链表中的“当前”指针,这个指针称为游标,可以通过游标访问链表中的所有元素:
增加:
获取游标所指的数据元素
重置
游标移动至下一个元素
直接指定删除的节点
刚开始游标为空,当插入多个节点后,游标指向第一次插入的那个节点。
实例如下:
//circlelist.h
#ifndef __CIRCLELIST_H__
#define __CIRCLELIST_H__
typedef struct circlelistnode
{
struct circlelistnode *next;
int item;
}CircleListNode;
typedef struct circlelist
{
CircleListNode header;
int length;
}CircleList;
CircleList *CircleList_Create();
void CircleList_Destroy(CircleList *list);
void CircleList_Clear(CircleList *list);
int CircleList_Length(CircleList *list);
int CircleList_Insert(CircleList *list, CircleListNode *node, int pos);
CircleListNode *CircleList_Get(CircleList *list, int pos);
CircleListNode *CircleList_Delete(CircleList *list,int pos);
#endif //__CIRCLELIST_H__
//circlelist.c文件
#include <stdlib.h>
#include "circlelist.h"
//创建
CircleList *CircleList_Create()
{
CircleList *ret = NULL;
ret = malloc(sizeof(CircleList));
if(ret != NULL)
{
ret->length = 0;
ret->header.next = NULL;
}
return ret;
}
//销毁
void CircleList_Destroy(CircleList *list)
{
free(list);
}
//清空
void CircleList_Clear(CircleList *list)
{
if( list != NULL )
{
list->length = 0;
list->header.next = NULL;
}
}
//求长度
int CircleList_Length(CircleList *list)
{
int ret = -1;
if( list != NULL )
{
ret = list->length;
}
return ret;
}
//插入
int CircleList_Insert(CircleList *list, CircleListNode *node, int pos)
{
int ret = (list!=NULL) && (node != NULL) && (pos>=0);
if( ret )
{