(*head)->prior=*head; (*head)->next=*head; }
//双向链表的表长
int ListLength(DLNode *L) {
DLNode *p=L; int len=0;
while(p->next!=L) {
p=p->next; len++; }
return len; }
//双向链表中插入数据
int ListInsert(DLNode *L,int i,int x)//i表示要插入的位置,x表示要插入的值 {
DLNode *p,*s; int j;
p=L->next; j=0;
while(p!=L&&j
p=p->next; j++; }
if(j!=i) {
cout<<\插入位置不合法!\ return 0; }
s=new DLNode ;//为节点申请空间 s->data=x;//为节点赋值
s->prior=p->prior;//在正确的位置插入节点 p->prior->next=s; s->next=p; p->prior=s; return 1; }
//删除双向链表中的数据
int ListDelete(DLNode *L,int i,int *x)//i表示要删除的位置,*X用来保存要删除的那个节点的值
{
DLNode *p; int j;
p=L->next; j=0;
while(p->next!=L&&j
p=p->next; j++; }
if(j!=i) {
cout<<\删除位置不合法!\ return 0; }
p->prior->next=p->next;//删除第i个位置的节点 p->next->prior=p->prior;
*x=p->data;//保存删除节点的值 delete p;//释放空间 return 1; }
//输入的数据
int InputNumber(DLNode *L) {
int input,i=0;//i表示第i个节点 char c;
//读入数据时,用0表示负数,1表示正数 cin>>input>>c; while(1) {
if(input<0&&i==0)//输入数为负且是第一个节点 {
L->data=0;//将长整数的符号保存在头结点中 input=fabs(input);//取输入数字的绝对值 ListInsert(L,i,input);//插入数据 }
else if(input>=0&&i==0)//输入数为正且是第一个节点 {
L->data=1;//将长整数的符号保存在头结点中 ListInsert(L,i,input);//插入数据 } else {
ListInsert(L,i,input);//不是第一个节点
} i++;
if(c==',') break;//输入逗号,跳出循环 cin>>input>>c; }
return 1; }
//输出数据
void OutputNumber(DLNode *L,int sign) {
DLNode *r=L->prior;
if(sign==1)//输出结果的正负 {
printf(\} else {
printf(\}
printf(\r=r->prior;
while(r!=L)//控制输出的格式 {
if(r->data<10) {
printf(\
printf(\ }
else if(r->data<100) {
printf(\
printf(\ }
else if(r->data<1000) {
printf(\
printf(\ } else {
printf(\ }
r=r->prior; }
printf(\}
//任意两个整数的加运算
int Add(DLNode *L1,DLNode *L2,DLNode *L3) {
int data; int i=0;
int length1,length2;
int longer;//用于标记在异号情况下哪个整数的位数一个更长些 int carry=0;//标记进位 int borrow=0;//标记借位
DLNode *p=L1->next,*q=L2->next,*l3=L3->prior,*notsame; //两个数为异号时的加法运算 if(L1->data!=L2->data) {
i=0;
length1=ListLength(L1); length2=ListLength(L2); //结点个数相同的情况 if(length1==length2) {
//找出p和q中第一个 数据不相同的节点 while(p!=L1)//循环整个链表 {
if(p->data>q->data)//p的值大于q的值 {
longer=1;
notsame=p->prior; break; }
else if(p->data
longer=2;
notsame=q->prior; break; }
else//; {
p=p->next; q=q->next; } }
//进入下一步的判断
if(p==L1)//一直到了表尾还是相同,则说明这两个数相同

