单向循环链表的建立
建立结构体
typedef struct node
{
int data;
struct node *next;
}Node, *LinkList;
初始化链表
LinkList Initial()
{
LinkList head;
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
return head;
}
单向循环链表的建立和单链表的建立大致相同区别仅在于尾结点。单链表的尾结点指针域是NULL,而循环链表尾结点指针指向头指针。
尾插法
void CreatByrear(LinkList head)
{
Node *r, *s;
int data;
r = head;
printf("请输入数据\n");
while (1)
{
scanf("%d", &data);
if (0 == data)
{
break;
}
s = (Node*)malloc(sizeof(Node));
s->data = data;
r->next = s;
r = s;
}
r->next = head; //尾结点指针指向头结点
}
头插法
void CreatByHead(LinkList head)
{
Node *r;
int data;
printf("请输入数据\n");
while (1)
{
scanf("%d", &data);
if (0 == data)
{
break;
}
r = (Node*)malloc(sizeof(Node));
r->data = data;
if (NULL == head->next)
{
r->next = head; //尾结点指针指向头结点
}
else
{
r->next = head->next;
}
head->next = r;
}
}
循环单链表遍历
用指针p(p = p->next)遍历链表,直到p = head。
void OutPut(LinkList head)
{
Node *p = head->next;
printf("输出为\n");
do
{
printf("%d", p->data);
p = p->next;
} while (p != head);
}