求高人帮看此程序错误
#include<iostream>
#include<string.h>
using namespace std;
class node
{
public:
int date;
node *next;
node *pre;
};
class list
{
protected:
node * head;
public:
list() {head=new node;head->next=NULL;}
list(list &s){head=s.head;}
void makeEmpty();
int length();
void insert(int x,int i);
int delet(int x);
int remove(int i);
int find(int x);
void display();
void getfun(list &A);
~list();
};
list::~list()
{
node *p;
for(int i=1;i<length();i++)
{
p=head->next;
head->next=p->next;
delete p;
}
head->next=NULL;
}
void list::makeEmpty()
{
node *p;
for(int i=1;i<length();i++)
{
p=head->next;
head->next=p->next;
delete p;
}
head->next=NULL;
}
int list::length()
{
node *p;
p=head->next;
int i=0;
if(p==NULL)
return i;
for(i=1;p->next!=NULL;i++ )
{
p=p->next;
}
return i;
}
void list::insert(int x,int i)
{
node *p,*q;
q=new node;
q->date=x;
p=head->next;
if(i>length())//没有第i个结点
{
cout<<"没有第"<<i<<"个结点"<<endl;
return;
}
if(i==0)//插入头结点之后,创建第一个结点
{
head->next=q;
q->next=NULL;
return;
}
for(int j=1;j<i;j++)//寻找第i个结点
{
p=p->next;
}
if(p->next==NULL)
{
p->next=q;
q->next=NULL;
}
else
{
q->next=p->next;
p->next=q;
}
}
int list::delet(int x)
{
node *p,*q;
p=head;
if(p==NULL)//若是空表
{
cout<<"链表是空表"<<endl;
return 0;
}
if(p->date==x)//若x是第一个结点
{
head=p->next;
delete p;
return 1;
}
else
{
while(p->date!=x&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->date==x)//若有结点x
{
q->next=p->next;
delete p;
return 1;
}
else
{
cout<<" 没有结点"<<x<<endl;
return 0;
}
}
}
void list::getfun( list &A){
int n=0,i;
do
{
cout<<"*************************************"<<endl<<"1 显示整个链表各结点的数值\n"
<<"2 求链表的长度\n"
<<"3 将x插入到第i个结点(不含头结点)的之后\n"
<<"4 删除链表中值为x的结点\n"
<<"5 删除链表中第i个结点\n"
<<"6 在链表中查找数值为x的结点\n"
<<"7 置空链表\n"<<"*************************************"<<endl;
cout<<"请选择您要使用的功能:\n";
if(n==0)
cin>>i;
switch(i)
{
case 1:A.display();break;
case 2:cout<<"链表的长度为"<<A.length()<<endl;break;
case 3:cout<<"请输入要插入的数";
int k,x;cin>>k;
cout<<"请输入要插入的结点后(不含头结点)"<<endl;
cin>>x;
A.insert(k,x);
cout<<"插入后链表为";A.display();break;
case 4:cout<<"请输入要删除的数"<<endl;
cin>>k;
if(A.delet(k))
{
cout<<"成功删除要删除的数"<<endl;
cout<<"删除后的链表";
A.display();
}
else cout<<"删除失败"<<endl;break;
case 5:cout<<"请输入要删除的结点"<<endl;
cin>>k;
if(A.remove(k))
{
cout<<"成功删除要删除的结点"<<endl;
cout<<"删除后的链表";
A.display();
}
else cout<<"删除失败"<<endl;break;
case 6:cout<<"请输入要查找的数"<<endl;
cin>>k;
if(A.find(k))
cout<<"找到要查找的数"<<endl;
else cout<<"没有找到要查找的数"<<endl;break;
case 7:A.makeEmpty();
cout<<"链表A的长度为"<<A.length()<<endl;
if(A.length()==0)
cout<<"成功置空"<<endl;
else
cout<<"置空失败"<<endl;break;
default:cout<<"输入错误\n";
}
cout<<"重新选择请输入,退出请按键0"<<endl;
cin>>i;
n++;
}while(i!=0);
}
int list::remove(int i)
{
node *p,*q;
q=new node;
p=head->next;
if(i>length())//没有第i个结点
{
cout<<"没有第"<<i<<"个结点"<<endl;
return 0;
}
for(int j=1;j<i;j++)
{
q=p;
p=p->next;
}
q->next=p->next;
delete p;
return 1;
}
int list::find(int x)
{
node * p;
p=new node;
p=head;
while(p->next!=NULL&&p->date!=x)
p=p->next;
if(p->date==x)
return 1;
else
return 0;
}
void list::display()
{
node *p=head;p=p->next;
while(p!=NULL)
{
cout<<p->date<<" ";
p=p->next;
}
cout<<endl;
}
class quene:public list{
node *tail;
public:
quene()
{
head=tail=new node;
head->next=NULL;
tail->next=NULL;
}
quene(quene &q)
{
head=q.head;
}
void push(int x);
void pop();
};
void quene::push(int x)
{
node *p;
p=new node;
p->date=x;
if(tail)
tail->next=p;
tail=p;
p->next=NULL;
if(!head)
head=tail;
}
void quene::pop()
{
node *p;
int data;
if(head)
{
data=head->date;
p=head;
head=head->next;
delete p;
cout<<"数据"<<data<<"出队!"<<endl;
}
else
cout<<"此队列空"<<endl;
}
class stack:public list{
node *tail;
public:
stack()
{
head=tail=new node;
head->next=NULL;
tail->next=NULL;
}
stack(const stack &s)
{
head=s.head;
}
void sin(int x);
void sout();
};
void stack::sin(int x)
{
node *p;
p=new node;
p->date=x;
if(head){
p->next=head;
head=p;
}
else{
p->next=NULL;
head=tail=p;
}
}
void stack::sout()
{
int data;
node *p;
if(head)
{
p=head;
data=p->date;
head=head->next;
delete p;
cout<<"数据"<<data<<"出栈!"<<endl;
}
else
{
cout<<"此栈空"<<endl;
}
}
int main()
{
cout<<"首先进行链表的操作:"<<endl;
cout<<"********************************"<<endl;
list lista;
int i=0;
int n;
char ch;
cout<<"请输入你要创建链表的数据个数:"<<endl;
cin>>n;
cout<<"下面输入所创建链表里面的元素:";
for(i=0;i<n;i++)
{
int da;
cin>>da;
lista.insert(da,i);
}
cout<<"原链表为\n"<<endl;
cout<<"请选择是否新建链表"<<endl;
cout<<"y 代表是 n 代表否"<<endl;
cin>>ch;
if(ch=='y'){
cout<<"现在将刚刚创建的链表复制到另外的链表中,并以此链表完成下面的操作"<<endl;
list listb(lista);
listb.display();
listb.getfun(lista);
}
if(ch=='n'){
cout<<"现在用刚刚创建的链表实现操作:"<<endl;
lista.display();
lista.getfun(lista);
}
cout<<"*********************************"<<endl;
cout<<"下面是队列的操作:"<<endl;
quene que;
cout<<"请输入你要创建链表的数据个数:"<<endl;
cin>>n;
int x;
cout<<"请输入队列里面的数值并将其入队";
for(i=0;i<n;i++){
cin>>x;
que.push(x);}
cout<<"队列元素出对"<<endl;
for(i=0;i<=n;i++)
que.pop();
cout<<"*********************************"<<endl;
cout<<"下面是队列的操作:"<<endl;
stack stak;
cout<<"请输入栈里面元素个数"<<endl;
cin>>n;
cout<<"请输入栈里面的数值并将其入栈"<<endl;
for(i=0;i<n;i++){
cin>>x;
stak.sin(x);}
cout<<endl;
cout<<"下面是栈元素出栈"<<endl;
for(i=0;i<=n;i++)
stak.sout();
return 0;
}
作者: Jiakunboy 发布时间: 2011-06-13
滚动条好长阿
作者: fontlose 发布时间: 2011-06-13
直接把compile 的结果亮出来呀,
作者: longbaoer_1215 发布时间: 2011-06-14