主题:编译能通过运行不行 帮帮忙啊 谢谢
#include<iostream>
using namespace std;
struct DulNode{
int data;
DulNode *prior;
DulNode *next;
};
class DulLinkList{
private:
DulNode *head;
int n;
public:
void inputNodeNumber();
void createList();
int listLength();
bool listInsert(int i,int e);
bool listDelete(int i);
void display();
};
void DulLinkList::inputNodeNumber()
{
printf("请输入双链表节点个数: \n");
do
{
scanf("%d",n);
if(n<=0) printf("不能创建该双链表,请重新输入:\n");
}while(n<=0);
}
void DulLinkList::createList()
{
int m;
DulNode *L,*p,*s;
L=new DulNode;
L->data=n;
L->prior=NULL;
L->next=NULL;
p=L;
for(int i=1;i<=n;i++)
{
printf("请输入第i个结点的值:\n");
scanf("%d",m);
s=new DulNode;
s->data=m;
s->next=NULL;
s->prior=p;
p->next=s;
p=s;
}
head=L;
}
int DulLinkList::listLength()
{
return n;
}
bool DulLinkList::listInsert(int i,int e)
{
int j=0;
DulNode *p,*s;
p=head;
while(p!=NULL&&j<i-1) { p=p->next; j++;}
if(p==NULL||j>i-1) { printf("插入位置错误\n"); return false; }
s=new DulNode;
s->data=e;
s->next=p->next;
s->prior=p;
p->next=s;
s->next->prior=s;
head->data++;
n++;
return true;
}
bool DulLinkList::listDelete(int i)
{
int j=0;
DulNode *p,*temp;
p=head;
while(p!=NULL&&j<i-1) { p=p->next; j++; }
if(p==NULL||j>i-1) { printf("删除位置错误"); return false; }
temp=p->next;
p->next=p->next->next;
p->next->prior=p;
delete temp;
head->data--;
n--;
return true;
}
void DulLinkList::display()
{
DulNode *p;
p=head->next;
printf("\n输出双链表\n");
printf("链表包含如下结点:\n");
for(int i=1;i<=n;i++)
{
printf("该结点的值为:d%",p->data);
p=p->next;
}
printf("链表输出完毕\n\n");
}
int main()
{
int n;
int i,e;
int choose=0;
DulLinkList L;
printf("\n创建双链表\n");
L.inputNodeNumber();
L.createList();
printf("\n链表创建成功,输出如下:\n");
L.display();
while(choose!=3)
{
choose=0;
printf("\n你可以对双链表进行的操作如下 :\n");
printf("1. 插入\n2. 删除\n3. 退出\n");
while(choose!=1&&choose!=2&&choose!=3)
{
printf("请输入 1 或 2 或 3:");
scanf("d%",choose);
if(choose!=1&&choose!=2&&choose!=3) printf("输入错误,请重新输入\n");
}
if(choose==1)
{
while(1)
{
printf("\n双链表插入前为:\n");
L.display();
printf("请输入要插入的数:");
scanf("d%",e);
printf("请输入要插入的位置:");
scanf("d%",i);
if(L.listInsert(i,e)) { printf("\n双链表插入后为:\n"); L.display(); break;}
else printf("输入的插入位置错误,请重试\n");
}
}
else if(choose==2)
{
while(1)
{
printf("\n双链表删除前为:\n");
L.display();
printf("请输入删除的结点的序号:");
scanf("d%",i);
if(L.listDelete(i)) { printf("\n双链表删除后为:\n"); L.display(); break; }
else printf("输入的结点序号错误,请重试\n");
}
}
else if(choose==3)
{
printf("\n双链表最后为:\n");
L.display();
continue;
}
}
return 0;
}
using namespace std;
struct DulNode{
int data;
DulNode *prior;
DulNode *next;
};
class DulLinkList{
private:
DulNode *head;
int n;
public:
void inputNodeNumber();
void createList();
int listLength();
bool listInsert(int i,int e);
bool listDelete(int i);
void display();
};
void DulLinkList::inputNodeNumber()
{
printf("请输入双链表节点个数: \n");
do
{
scanf("%d",n);
if(n<=0) printf("不能创建该双链表,请重新输入:\n");
}while(n<=0);
}
void DulLinkList::createList()
{
int m;
DulNode *L,*p,*s;
L=new DulNode;
L->data=n;
L->prior=NULL;
L->next=NULL;
p=L;
for(int i=1;i<=n;i++)
{
printf("请输入第i个结点的值:\n");
scanf("%d",m);
s=new DulNode;
s->data=m;
s->next=NULL;
s->prior=p;
p->next=s;
p=s;
}
head=L;
}
int DulLinkList::listLength()
{
return n;
}
bool DulLinkList::listInsert(int i,int e)
{
int j=0;
DulNode *p,*s;
p=head;
while(p!=NULL&&j<i-1) { p=p->next; j++;}
if(p==NULL||j>i-1) { printf("插入位置错误\n"); return false; }
s=new DulNode;
s->data=e;
s->next=p->next;
s->prior=p;
p->next=s;
s->next->prior=s;
head->data++;
n++;
return true;
}
bool DulLinkList::listDelete(int i)
{
int j=0;
DulNode *p,*temp;
p=head;
while(p!=NULL&&j<i-1) { p=p->next; j++; }
if(p==NULL||j>i-1) { printf("删除位置错误"); return false; }
temp=p->next;
p->next=p->next->next;
p->next->prior=p;
delete temp;
head->data--;
n--;
return true;
}
void DulLinkList::display()
{
DulNode *p;
p=head->next;
printf("\n输出双链表\n");
printf("链表包含如下结点:\n");
for(int i=1;i<=n;i++)
{
printf("该结点的值为:d%",p->data);
p=p->next;
}
printf("链表输出完毕\n\n");
}
int main()
{
int n;
int i,e;
int choose=0;
DulLinkList L;
printf("\n创建双链表\n");
L.inputNodeNumber();
L.createList();
printf("\n链表创建成功,输出如下:\n");
L.display();
while(choose!=3)
{
choose=0;
printf("\n你可以对双链表进行的操作如下 :\n");
printf("1. 插入\n2. 删除\n3. 退出\n");
while(choose!=1&&choose!=2&&choose!=3)
{
printf("请输入 1 或 2 或 3:");
scanf("d%",choose);
if(choose!=1&&choose!=2&&choose!=3) printf("输入错误,请重新输入\n");
}
if(choose==1)
{
while(1)
{
printf("\n双链表插入前为:\n");
L.display();
printf("请输入要插入的数:");
scanf("d%",e);
printf("请输入要插入的位置:");
scanf("d%",i);
if(L.listInsert(i,e)) { printf("\n双链表插入后为:\n"); L.display(); break;}
else printf("输入的插入位置错误,请重试\n");
}
}
else if(choose==2)
{
while(1)
{
printf("\n双链表删除前为:\n");
L.display();
printf("请输入删除的结点的序号:");
scanf("d%",i);
if(L.listDelete(i)) { printf("\n双链表删除后为:\n"); L.display(); break; }
else printf("输入的结点序号错误,请重试\n");
}
}
else if(choose==3)
{
printf("\n双链表最后为:\n");
L.display();
continue;
}
}
return 0;
}