单循环链表的实现
2006-01-25 02:45
239 查看
循环链表(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
}
int main(void)
{
rear = (linklist*)malloc(sizeof(linklist));
CreateSingleLoopList();
GetRearHead(rear);
return 0;
}
因为在单链表中尾结点的指针域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
}
int main(void)
{
rear = (linklist*)malloc(sizeof(linklist));
CreateSingleLoopList();
GetRearHead(rear);
return 0;
}
相关文章推荐
- 数据结构之循环双向链表java实现
- 数据结构Java实现04----循环链表、仿真链表
- 线性结构之循环链表实现
- 链表反转C实现(递归与循环)
- 数据结构实现循环链表
- 数据结构三:循环链表解决约瑟夫问题实现
- 队列实现 (双向循环链表 C++)
- 数据结构实验-用C++实现带头结点的循环链表
- 数据结构基础(11) --循环链表的设计与实现
- java双向循环链表的实现代码
- 利用循环链表(单链)实现Josephus环(某公司校园招聘笔试试题)
- JAVA实现循环链表
- 双向循环链表插入算法的C++程序实现
- 链表的C语言实现之循环链表及双向链表(转)
- 双向链表实现队列与循环链表
- day01之合并两个有序链表+实现1+2+3...+n要求不能使用乘除法循环条件判断等
- Python实现的单向循环链表功能示例
- C代码实现:操作循环链表按规则移除结点
- Structure.List 线性表(包含顺序链表,单链表,双链表,双向循环链表的实现)
- Linux双向循环链表的实现