Circular Linked List)是一种首尾相接的链表,它与单链表的唯一区别在于对尾结点的处理;因为在单链表中尾结点的指针域NULL改为指向头结点就得到了单循环链表。单循环链表可以用头指针
head或尾指针rear表示,用尾指针rear表示的单循环链表查找开始结点a1和尾结点an就很方便;查找
时间都是O(1)。
仅设尾指针rear的单循环链表的实现:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}linklist;
linklist *rear=NULL;
linklist* CreateSingleLoopList() //单循环链表的实现
{
int _data;
linklist *pCurrent,*head;
head = (linklist*)malloc(sizeof(linklist));
scanf("%d",&_data);
rear->data = _data;
rear->next = head;
head->next = rear;
scanf("%d",&_data);
while (_data != -1)
{
pCurrent = (linklist*)malloc(sizeof(linklist));
pCurrent->data = _data;
rear->next = pCurrent;
pCurrent->next = head;
rear = pCurrent;
scanf("%d",&_data);
}
return rear;
}
void GetRearHead(linklist *p) //取开始结点和尾结点
{
printf("%d,",p->data); //终端结点an
printf("%d,",p->next->next->data); //开始结点a1
linklist *pCurr,*pCurr_1,*pCurr_2;
pCurr_1=p;
pCurr_2=p->next;
while (pCurr_2!=p)
{
printf("%d,",pCurr_2->data);
pCurr_1=pCurr_2;
pCurr_2=pCurr_2->next;
}
}
int main(void)
{
rear = (linklist*)malloc(sizeof(linklist));
CreateSingleLoopList();
GetRearHead(rear);
return 0;
}
rear->data //没有输入有效的数据