请高手帮忙调试一下:
设计内容和要求
1. 建立双向链表L,含n个结点且按整数值递增排列的(输入任意);
2. 删除双向链表中多余的值相同的元素
3. 求出的长度
4. 将双向链表就地逆置
5. 向双向链表中插入值,插入后双向链表仍有序
#include<iostream.h>
#define NULL 0
typedef struct dlnode
{
int data;
struct dlnode *prior,*next;
}dlnode,*dlinkist;
dlinkist H;
void fuzhi(int n)
{
dlnode *s;
int i=1,j;
cout<<"请给链表赋值:"<<endl;
do
{
s=new dlnode;
cin>>s->data;cin>>",";
s->prior=H;
s->next=H->next;
H->next=s;
i++;
if(s->data=NULL)
{
cout<<"您是否确定不再赋值?1表示“确定”,0表示“取消”。请选择:";
cin>>j;
}
if(j)break;
else continue;
}while(i<n);
if(i>n)cout<<"您已赋值完毕!"<<endl;
return;
}
void chazhao(dlinkist p,int x)
{
do
{
if(p->data==x)return;
else p=p->next;
}while(p->next!=H);
if(p->next==H)
{
p=H;
return;
}
}
void charu()
{
dlinkist p=H;
int i,j,x;
cout<<"请问你想在哪个数后面插入数值?";
cin>>x;
chazhao(p,x);
if(p!=H)
{
cout<<"您输入的数值存在,是否要在该数后面插入数值?"
<<"1表示“确定”,0表示“取消”:";
cin>>i;
if(i)
{
cout<<"请输入您要插入的数值:";
cin>>p->data;
cout<<"插入成功。"<<endl;
}
else return;
}
else
{
cout<<"没有你想找的数值。"<<"是否重新输入?"
<<"1是,0否:";
cin>>j;
if(j)
{
charu();
return;
}
else return;
}
}
void sanchu()
{
dlinkist p=H;
int x,i;
cout<<"请输入您要删除的数据:";
cin>>x;
chazhao(p,x);
if(p!=H)
{
cout<<"是否删除该数据?1是,0否。请选择:";
cin>>i;
if(i)
{
p->next->prior=p->prior;
p->prior->next=p->next;
delete p;
}
else
{
cout<<"是否继续?"
<<"1是,0否:";
cin>>i;
if(i)
{
sanchu();
return;
}
return;
}
}
}
int biaochang()
{
int i;
dlinkist p=H;
do
{
p=p->next;
i++;
}while(p->next!=H);
return i;
}
void paixu()
{
dlinkist q=H->next;
int i,j;
i=biaochang()-1;
for(j=0;j<i;j++)
{
do
{
if(q->data>(q+1)->data)
{
H->data=q->data;
q->data=(q+1)->data;
(q+1)->data=H->data;
}
q=q->next;
}while(q->next!=H);
}
}
void nizhi()
{
dlinkist p,q;
p=H->next;q=H->prior;
do
{
H->data=p->data;
p->data=q->data;
q->data=H->data;
p=p->next;
q=q->prior;
}while(p!=q);
}
void shuchu()
{
dlinkist p=H->next;
do
{
cout<<p->data<<" ";
p=p->next;
}while(p->next!=H);
}
void main()
{
int n;
cout<<"请确定结点数n:";
cin>>n;
while(n<0)
{
cout<<"n非法,请重新输入n:";
cin>>n;
}
int i=0,j;
cout<<"是否要给链表各结点赋值?(1是,0否)";
cin>>j;
if(j==1)
{
fuzhi(n);
}
char str;
do
{
cout<<"请选择对链表进行的操作。"
<<"a表示插入数值,b表示删除同样的数值,c表示对链表进行排序,"
<<"d表示逆置链表,e表示求表长,f表示输出链表:";
cin>>str;
switch(str)
{
case'a':charu();break;
case'b':sanchu();break;
case'c':paixu();break;
case'd':nizhi();break;
case'e':{cout<<"表长为"<<biaochang()<<endl;}break;
case'f':shuchu();break;
default:
{
i=1;
cout<<"没有您想要的操作,请重新选择"<<endl;
}
}
}while(i);
}