c言語循環チェーンの実現
シングルチェーンの表には一定の欠陥があります.つまり、一方通行で、一つのノードから次のノードにしかアクセスできません.前のノードにアクセスできません.循環チェーンはこの問題を解決できます.もちろん、双方向チェーンを使うほうが便利です.
#include
#include
typedef struct node
{
int data;
struct node *next;//
int size;//
}node,*linklist;//linklist
void create_list_head(linklist *l)//
{
int i,j,x;
linklist p,q;
printf("please input length");
scanf("%d",&j);
(*l)=(node*)malloc(sizeof(node));
(*l)->next=NULL;// , error
(*l)->size=j;
for(i=0;idata=x;
p->next=(*l)->next;
(*l)->next=p;
}
//q=(node*)malloc(sizeof(node));
q=(*l)->next;
while(q->next!=NULL)//
{
q=q->next;
}
//printf("%d",q->data);
q->next=(*l)->next;//
}
void create_list_tail(linklist *l)//
{
int i,j,x;
linklist p,r,t;
printf("please input the length");
scanf("%d",&j);
(*l)=(node*)malloc(sizeof(node));
(*l)->next=NULL;
(*l)->size=j;
t=(*l);
for(i=0;idata=x;
t->next=p;
t=p;// ,
}
t->next=NULL;
r=(*l)->next;
while(r->next!=NULL)
{
r=r->next;
}
r->next=(*l)->next;
}
void print_list_he(linklist *l)//
{
int i;
linklist p;
p=(*l)->next;
for(i=0;isize;i++)
{
printf("%d
",p->data);
p=p->next;
}
}
int main()
{
linklist a;
create_list_head(&a);
create_list_tail(&a);
print_list_he(&a);
return 0;
}