三个表头结点与三个附加表头指针
#include <stdio.h>
#include <stdlib.h>
#include "2_4-25.h"
#define End_Num 1000
typedef int element_type;
void creaklinked(int &h1,int &h2,int &h) // 构造函数
{
element_type x;
int p,q; // p用于构造要插入的结点,q当指针用
a[h1].link = h2^h; // 构造初始循环链表
a[h2].link = h1^h;
a[h].link = h1^h2;
scanf("%d",&x); // 插入结点
q = h;
while(x != End_Num)
{
p = takeoff(); // 新的结点
a[p].data = x;
a[p].link = q^h1; // 插入后三个结点改变连接
a[h1].link = (a[h1].link^h)^p;
a[q].link = (a[q].link^h1)^p;
q = p; // q指针后移
scanf("%d",&x);
}
}
void outlink(int h1,int h2,int h) // 输出函数
{
int p,q,r; // p,q指针(双向链表需要至少两个指针带路) r指针指向要输出的结点
p = h,q = h2;
while(r != h1)
{
r = a[p].link^q; // 获取要输出的结点的下标
printf("%d",a[r].data);
q = p,p = r; // 指针后移
}
printf("\n");
}
int main()
{
int h1,h2,h;
h1 = takeoff(); // 申请结点
h2 = takeoff();
h = takeoff();
initial(); // 初始化自由队列
creaklinked(&h1,&h2,&h);
outlink(h1,h2,h);
return 0;
}