读书人

再问:还是连表的代码~解决方法

发布时间: 2012-03-19 22:03:04 作者: rapoo

再问:还是连表的代码~~~

C/C++ code
#include <iostream>using namespace std;class List{public:    int data;    List *next;};  void CreateList (List *L){    List *p;    int e;    L = new List;    (*L).next = NULL;    cout << "creat a list and end of 0." << endl;    cin >> e;    while(e)    {        p = new List;        (*p).data = e;        (*p).next = (*L).next;        (*L).next = p;         cin >> e;    }}void Traverse(List *L){    List *p;    cout << "print all number:" << endl;    for (p=L; p!=NULL; p=(*p).next)    {        cout << (*p).data;    }    cout << endl;}void Delete(List *L, int e){    List *p, *q;    p = L;    q = L;    while(q && (*q).data!=e)    {        p = q;        q = (*q).next;    }    if(!q)    {        cout << endl << "can not find! not deleted.";    }    else    {        (*p).next = (*q).next;        free(q);    }}void main(){    List *La;    int e, select;    La = NULL;    while (select)    {        cout << " 1.creat list." << endl;        cout << " 2.print all." << endl;        cout << " 3.delete any." << endl;        cout << " 0.exit." << endl;        cin >> select;        switch (select)        {        case 1:CreateList(La);               break;        case 2:Traverse(La);               break;        case 3:cout << " input any number:";               cin >> e;               Delete(La, e);               Traverse(La);               break;        default:break;        }    }}



建立的时候好象都没有什么问题
到输出的时候就什么都没有

不知道什么问题 高手解~~~~
谢谢~~~~

[解决办法]
#include <iostream>
using namespace std;

class List
{
public:
int data;
List *next;
};

void CreateList (List* &L)
{
List *p;
int e;
L = new List;
//(*L).next = NULL;
L->next = NULL;
cout << "creat a list and end of 0." << endl;
cin >> e;
while(e)
{
p = new List;
p->data = e;
p->next = L->next;
L->next = p;
cin >> e;
}
}

void Traverse(List *L)
{
List *p;
cout << "print all number:" << endl;
//La头结点没有数据; p = L->next
for (p=L->next; p!=NULL; p=(*p).next)
{
cout << (*p).data <<" ";
}
cout << endl;
}

void Delete(List *L, int e)
{
List *p, *q;
p = L;
q = L;
while(q && (*q).data!=e)
{
p = q;
q = (*q).next;
}
if(!q)
{
cout << endl << "can not find! not deleted.";
}
else
{
(*p).next = (*q).next;
free(q);
}
}


void main()

{
List *La;
int e, select;
La = NULL;

while (1)
{
cout << "1.creat list." << endl;
cout << "2.print all." << endl;
cout << "3.delete any." << endl;
cout << "0.exit." << endl;

cin >> select;

switch (select)
{
case 1:
CreateList(La);
break;
case 2:
Traverse(La);
break;
case 3:
cout << " input any number:";
cin >> e;
Delete(La, e);
Traverse(La);
break;
default:break;
}
if (select == 0)
{
break;
}


}
}
[解决办法]
犯了重大失误,还是指针的使用上的问题,以下是在VC2005下编译通过且运行正确:


C/C++ code
#include <iostream>using namespace std;class List{public:    int data;    List *next;};  void CreateList (List *&L)//这里传指针是错误的,函数形参只是La指针的一个拷贝,并不能实质上对La分配内存{    List *p;    int e;    L = new List;    (*L).data = 0; //head 这个地方初始化    (*L).next = NULL;    cout << "creat a list and end of 0." << endl;    cin >> e;    while(e)    {        p = new List;        (*p).data = e;        (*p).next = (*L).next;        (*L).next = p;         cin >> e;    }}void Traverse(List *L){    List *p;    cout << "print all number:" << endl;    for (p=L; p!=NULL; p=(*p).next)    {        cout << (*p).data<< "->";    }    cout << endl;}void Delete(List *L, int e){    List *p, *q;    p = L;    q = L;    while(q && (*q).data!=e)    {        p = q;        q = (*q).next;    }    if(!q)    {        cout << endl << "can not find! not deleted.";    }    else    {        (*p).next = (*q).next;        free(q);    }}void main(){    List *La;    int e, select=1;//这里一定要初始化    La = NULL;    while (select)    {        cout << " 1.creat list." << endl;        cout << " 2.print all." << endl;        cout << " 3.delete any." << endl;        cout << " 0.exit." << endl;        cin >> select;        switch (select)        {        case 1:CreateList(La);               break;        case 2:Traverse(La);               break;        case 3:cout << " input any number:";               cin >> e;               Delete(La, e);               Traverse(La);               break;        default:break;        }    }} 

读书人网 >C++

热点推荐