求高人帮看此程序错误


#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