望高手帮忙看看那里错了

NEO-X 2011-03-28 01:58:54


#include<iostream>

//定义结点类
class node
{
private:
friend class slist;
int data;
node *next;
public:
node(int a)
{
data=0;
next=new node(0);
}
~node()
{
delete []next;
}
};

//定义单链表类
class slist
{
node *head;//是头指针。
int size;//用来表示当前链表长
public:
slist(int a[],int i);
~slist();
node* index(int i);//用来查找相应的结点
bool charu(int i,int &elem);//在i个位置处插结点elem
};

slist::slist(int a[],int i)
{
node *p;
int j;
head=new node(0);
for(j=0;j<i;j++)
{
p=new node(0);
p->data=a[j];
p->next=head->next;
head->next=p;
}
size=i;
}
slist::~slist()
{
delete []head;
}
//现在是功能函数index
node *slist::index(int i)
{
node *p;
int j;
if(i<1||i>size)
return 0;
else
{
p=head->next;
while(j!=i)
{
p=p->next;
}
}
std::cout<<"you want element whose number is:"<<p->data<<std::endl;
return p;
}
bool slist::charu(int i,int &elem)
{
node *p;
if(i<1||i>size)
return false;
else
{
p=index(i);
p->next=head->next;//
head->next=p;//
}
return true;
}
int slist::show()
{


return 0;
}

//main函数
int main()
{
int n=15;
int k=5;
int shuzu[]={1,2,3,4,5,6,7,8,9};
slist geek(shuzu,n);
geek.index(4);
geek.charu(3,k);


return 0;
}

可以通过编译就是没有显示。调试时总报错



...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaolinger2 2011-03-28
  • 打赏
  • 举报
回复
给你一个修改的例子吧,简单测试通过,不保证没有别的问题,但愿能给你一个参考。


#include "stdafx.h"
#include<iostream>
#include <iostream.h>

class node
{
friend class slist;
private:

int data;
node *next;
node()
{
next=NULL;
}
node(int a)
{
data=a;
next=NULL;
}
};

class slist
{
node *head;
int size;
public:
slist(int a[],int i);
~slist();
node* index(int i);
bool charu(int i,int elem);
bool show();
};

slist::slist(int a[],int i)
{
node *p=NULL,*q=NULL;
int j;
head=new node();
head->data=a[0];
for(j=1;j<i;j++)
{
if(j==1)
{
p=new node();
p->data=a[j];
head->next=p;
}
else
{
p->next=new node();
p->next->data=a[j];
p=p->next;
}

}
size=i;
}
slist::~slist()
{
node *p,*q;
p=head;
q=head->next;
while(p!=NULL)
{
delete p;
p=q;
if(p->next==NULL)
break;
q=p->next;
}
}

node *slist::index(int i)
{
node *p;
int j=0;
if(i<1||i>size)
return NULL;
else
{

if(i==1)
return head;
if(i==2)
return head->next;
p=head->next;
j=2;
while(j<i)
{
p=p->next;
j++;
}
}
std::cout<<"you want element whose number is:"<<p->data<<std::endl;
return p;
}
bool slist::charu(int i,int elem)
{
node *p,*q;
if(i<1||i>size)
return false;
else
{
p=index(i);
q=p;
p=new node(elem);
p->next=q->next;
q->next=p;
}
return true;
}

bool slist::show()
{
node *p;
p=head;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
cout<<endl;
return true;
}

//main敓悢
int main()
{
int n=9;
int k=5;
int shuzu[]={1,2,3,4,5,6,7,8,9};
slist geek(shuzu,n);
geek.show();
geek.index(4);
geek.show();
geek.charu(3,k);
geek.show();


return 0;
}

zhaolinger2 2011-03-28
  • 打赏
  • 举报
回复
你的程序里错误很多啊

比如,循环变量在循环体中没有自增导致无限循环
比如,链表类定义中缺少声明却在外面有同名函数的定义
比如,赋值构造函数的赋值参数根本没被使用

建议lz用debug方式一步一步地看看。
NEO-X 2011-03-28
  • 打赏
  • 举报
回复
帮忙告诉我怎么改啊。我已经在这里纠缠了好几天了。
bdmh 2011-03-28
  • 打赏
  • 举报
回复
node(int a)
{
data=0;
next=new node(0); //这里一直调用自身的构造函数
}
这个地方死循环了

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧