单项循环链表
单向循环链表
1。节点
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}listnode,*linklist;
2.声明单向循环空链表,不带头结点的单向循环链表
linklist init_list()
{
linklist L =NULL
return L;
}
bool is_empty(linklist L)//判断是否为空链表
{
return L ==NULL
}
3.插入数据
//bool inser_node(int data,struct node *l)
bool inser_node(int data,linklist *l)//主要因为这里要对头进行操作所有需要取*,传地址,否则只能对形参产生影响,而不影响实参的变化。
{
//产生新节点
linklist new =malloc();
new->data=data;
//
if(is_empty(*pl))
{
*l=new;
new->next=new;//循环,指向自身
return true;
}
//链表不为空插入节点
linklist p = *l;
while(p->next!=*l)
{
p=p->next;
}
new->next=*l;
p->next=new;
return true;
}
4.
show(linklist L)
{
linklist p=L;
while(p->next!=L)
{
printf("",p->data)
p=p->next;
}
printf("",p->data)//打印节点,注意最后一个节点需要格外打印
}
int main()
{
linklist L;
L=init_list();
for(i=1;i<=5;i++)
{
inser_node(i,&L);//这里注意取地址
}
}