📄 双向循环.c
字号:
#include<stdio.h>
#include<malloc.h>
typedef struct node
{int data;
struct node *next,*prior;
}Node,*lklist,*pointer;
lklist setup()
{lklist head;
pointer p,q;
int x;
head=(lklist)malloc(sizeof(Node));
p=head;
scanf("%d",&x);
while(x!=32767)
{q=(lklist)malloc(sizeof(Node));
q->data=x;
p->next=q;
p->prior=0;
p=q;
scanf("%d",&x);
}
p->next=0;
return head;
}
void display(lklist head)
{pointer p;
p=head->next;
while(p)
{printf("%5d",p->data);
p=p->next;
}
}
lklist merg(lklist head) //将单链表变成双向循环链表
{pointer p,q,s;
p=head;
while(p->next)
p=p->next;
p->next=head->next;
free(head);
s=p;
q=p->next;
while(q!=p)
{q->prior=s;
s=q;
q=q->next;
}
q->prior=s;
return p;
}
void display1(lklist p) //用NEXT来遍历
{pointer q;
q=p->next;
while(q!=p)
{printf(" %d",q->data);
q=q->next;
}
printf(" %d",q->data);
}
void display2(lklist q)//用PRIOR来遍历
{pointer p;
p=q->next;
while(q!=p)
{printf(" %d",q->data);
q=q->prior;
}
printf(" %d",p->data);
}
void main()
{lklist head;
head=setup();
display(head);
printf("\n\n");
head=merg(head); //调用单链表变双向循环链表函数
display1(head);
printf("\n\n");
display2(head);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -