C++中关于链表的创建的问题

我的代码如下,编译的时候没有问题,但运行就出现问题了,请教高手速解!

#include <iostream>
using namespace std;
template <class T>
class LinearList
{
public:
virtual void Create() const=0;
virtual void Output() const=0;
};

template <class T> class SingleList;

template<class T>
class Node
{
private:
T data;
Node<T> *link;
friend class SingleList<T>;
};

template <class T>
class SingleList:public LinearList<T>
{
public:
SingleList(void) {first=NULL;}
void Create() const;
void Output() const;
private:
Node<T> *first;
};

template <class T>
void SingleList<T>::Create () const
{
Node<T> *p=first;
int n;
cout<<"请输入需要创建的结点的个数:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
p->data=i;
p=p->link;
}
cout<<"具有"<<n<<"个结点的单链表创建完毕!"<<endl;
}

template <class T>
void SingleList<T>::Output () const
{
Node<T> *p=first;
while(p)
{
cout<<p->data<<" ";
p=p->link;
}
cout<<endl;
}

void main()
{
SingleList<int> s;
s.Create ();
s.Output ();
}

谢谢各位高手了 麻烦各位了...

首先first是个空指针,所以p也是空指针,调用肯定会出错,另外循环里没有new的话怎么创建链表?!下面是我改的程序:

template <class T>
class LinearList
{
public:
virtual void Create() const=0;
virtual void Output() const=0;
};

template <class T> class SingleList;

template<class T>
class Node
{
private:
T data;
Node<T> *link;
friend class SingleList<T>;
};

template <class T>
class SingleList:public LinearList<T>
{
public:
SingleList(void) {first= new Node<T>;first->data=0;first->link=NULL;}
~SingleList(void) {delete first; first = NULL;}
void Create() const;
void Output() const;
private:
Node<T> *first;
};

template <class T>
void SingleList<T>::Create () const
{
Node<T> *p=first;
int n;
cout<<"请输入需要创建的结点的个数:"<<endl;
cin>>n;
for(int i=1;i<n;i++)
{
Node<T> *next= new Node<T>;
next->data=i;
next->link=NULL;
p->link=next;
p=next;
}
cout<<"具有"<<n<<"个结点的单链表创建完毕!"<<endl;
}

template <class T>
void SingleList<T>::Output () const
{
Node<T> *p=first;
while(p)
{
cout<<p->data<<" ";
p=p->link;
}
cout<<endl;
}

void main()
{
SingleList<int> s;
s.Create ();
s.Output ();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-03-08
我给调式了一下,发现运行到create函数的p->data=i;
这一句就错了。我看了看,你的p是一个指针,可是没有初始化呀。
P指向first,但是first没有初始化
也就是说指针是要指向内存中的一块地址的,现在没有
第2个回答  2009-03-08
从头到尾都没看到一个new运算符,不知道空间哪儿来的,
调试发现是creat()循环中悬空引用出错;
第3个回答  2009-03-08
链表指针在使用前一定要给它空间,一个指针只有一个字符的空间,肯定不能存储一个结点的东西的,改改在试试把。。。

c++ MFC 里的链表问题(内详)
链表是一种数据结构,就像是一个一个的珠子串起来的链子,每个珠子就是一个结构体变量(当然这是C语言中的说法,要是是C++的话,每个珠子就是一个对象了),这种数据结构可以很方便地的访问每个元素,一般它是与数组相对的,数组是串行的,按照索引来访问元素,而链表是靠结构体中存储的下一个元素的...

c++链表问题
答:链表的结构就是图中所示了,r就是S的指针域指向的下一个节点。提示:r的指针域不为NULL,不能作为链表的尾节点哦,要给r->link=NULL;

C++ 关于用new创建链表的问题
=0){ p1 = new Node;\/\/不是这里的问题 cout<<"输入数字: "; cin>>p1->num; p2->next = p1; p2=p1; } p2->next=NULL;\/\/加上这一句,让尾记录的next指向空 return head;}void display(Node *head){ Node *p; p = head; int i=1; while(p){\/\/改成这...

c++链表栈问题
1.建立抽象模型,说起来这件事得追溯到C++本身的结构上:从广义上看,类是一个数据操作集合体,即使数据结构也不外乎如是。那么我们必须知道栈需要什么——这是一切问题的起点。数据结构是数据模型的实现,围绕数据为中心,操作为主要手段的语义模型。真正具体化到C++的类中,我们就是要确定储存结构(系...

C++单链线性表的初始化问题
L->next=p; \/\/ █ 代表节点 <--- 代表指针 你那个程序指针是这样指的 █ <-- █ <-- █ <--- █for循环一结束就指向最后面的节点了 这样L是往后移动的, 所以输出时倒着输出 L-next存储p上次创建的节点的地址 p是后来创建的节点 所以后面节点总是指向前面的节点 ...

c++ 链表,,求指导,程序崩溃,line:1044
不过还是说几点可能出问题的地方:链表的最后一个节点的next的值,是否设置为NULL了,如果没有设置,到了最后一个节点的时候,就会出现崩溃.你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.考虑下在进入循环的第一次是否就...

c++ 链表,,求指导,程序崩溃,line:1044
1.链表的最后一个节点的next的值,是否设置为NULL了,如果没有设置,到了最后一个节点的时候,就会出现崩溃.2.你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.3.考虑下在进入循环的第一次是否就有问题,因为循环里,并没...

链表中的怎么使用指针进行链表的建立、插入、删除等处理操作
1、链表建立需要节点。这是存储数据的基础,以C++语言为例,要建立这样的节点(假设存储信息的类型作为一个模板)template <class DataType> struct Node{ DataType info;\/\/节点存储的信息 Node<DataType> *next;};2、因为你是使用指针,那么,就需要动态创建结构体。使用new 运算符在堆内存中创建 Node...

用C++完成实验 单链表的建立及基本操作
\/* 清空单链表 *\/ void LinkedListClear(LinkedList L){ L->next=NULL;} \/* 检查单链表是否为空 *\/ int LinkedListEmpty(LinkedList L){ if (L->next==NULL) return TRUE;else return FALSE;} \/* 遍历单链表 *\/ void LinkedListTraverse(LinkedList L){ LinkedList p;p=L->next;while (p...

【数据结构】C\/C++ 单链表的 创建、初始化、增、删、改、查、遍历等基 ...
C\/C++单链表的基本操作包括创建、初始化、增删改查和遍历等。首先,定义链表结构,包括数据域和指向下一个节点的指针。头插法建立链表函数Creat_LinkList()的工作流程是:动态分配链表节点,输入用户数据,通过循环将节点依次插入到链表头部,直到用户输入0为止。尾插法的创建函数Creat_LinkList_R()则是...

相似回答
大家正在搜