回 帖 发 新 帖 刷新版面

主题:求助 关于线性表

我写了下面的程序,希望实现两个线性表的连接,可是尽管能够将两个线性表连接在一起,每当程序执行到main函数的最后的‘ } '总是出错。请各位大侠指点。


#include<iostream.h>
#include<stdio.h>

typedef struct node             //定义结点类型
{
  node(){link=NULL;}
  node(char e,node *next)
  {
    elem=e;link=next;
  }
   char elem;
   node *link;
}node;

typedef class linklist          //定义线性表
{
  public:
      linklist(){first=NULL;}      
      ~linklist(){clear();}
      void clear();
      void create();
      void remove(char &x);     //删除线性表中的X元素
 private:
     void output(ostream &out)const;
     node *first;
     friend ostream &operator<<(ostream &out,linklist &s);
     friend void connectstr(linklist &s1,linklist &s2);   //连接两个线性表
}linklist;

void linklist::clear()    
{
  node *p;
  while(first){
  p=first->link;
  delete first;
  first=p;
  }
}

void linklist::create()
{
  char c;
  node *p,*r=NULL;
  first=NULL;
  while((c=getchar())!='\n'){
  p=new node(c,NULL);
  if(first!=NULL)r->link=p;
  else first=p;
  r=p;
}
}
  void linklist::remove(char &x)
{
  node *p=first,*q;
  while(p){
      if(p->elem==x){
          if(p==first){q=p;first=p=p->link;delete q;}
          else {q->link=p->link;delete p;p=q->link;}
      }
      else {q=p;p=p->link;}
  }
}
void linklist::output(ostream &out)const
{
  node *p=first;
  while(p){
      out<<p->elem;
      p=p->link;
  }
  out<<endl;
}

ostream &operator<<(ostream &out,linklist &s)
{
  s.output(out);
  return out;
}
void connectstr(linklist &s1,linklist &s2)
{
 node *r1=s1.first->link,*r3=s1.first; 
 while(r1)
 {
     r3->link =r1;
     r3=r1;
     r1=r1->link;
 }
 r1=s2.first;
 while(r1){
     r3->link =r1;
     r3=r1;
     r1=r1->link;
 }
}
void main()
{
    linklist link1=linklist();
    linklist link2=linklist();
    link1.create();
    link2.create();
    connectstr(link1,link2);
    cout<<link1;
}   // ------此处出错

例如:我输入
link1:ghj
link2:kfd
它输出:
ghjkfd
然后说程序出错

回复列表 (共3个回复)

沙发

这是C++吗?好奇怪~~我对C++不是很在行啊,但我原来学的C++没这样写过程序啊:

void main()
{
    linklist link1=linklist();
    linklist link2=linklist();

linklist()是成员函数,又不是全局函数也不是静态函数,怎么可以就这样调用?但是VC好像通过了编译,真奇怪~~

像那个构造函数是C++自动调用的,不用你再显式的调用,这样改:

linklist link1,link2;

就可以了

还有C++中struct,class定义都可以不用再定义宏名,那个typedef是多余的

C++是一种动态编联的机制,它们(函数,成员)那是在对象生成时‘临时’产生的,是一段动态的代码,而并不像以前写一个函数,就可以调用那个函数,在定义‘对象’之前那些写在类定义中的成员函数都是不存在的。。。

板凳

void main()
{
    linklist link1=linklist();
    linklist link2=linklist();
    link1.create();
    link2.create();
    connectstr(link1,link2);//是这句有问题,这个函数的定义可能导致了一些内存问题
    cout<<link1;
}

3 楼

我想应该不是connectstr(link1link2)的错,而可能是析构函数~linklist(){clear();}或clear()的错,因为当我把析构函数~linklist()去掉之后就不再发生错误了。
不知是什么原因,请rickone大侠指点!小弟先行谢过啦!

我来回复

您尚未登录,请登录后再回复。点此登录或注册