再问:还是连表的代码~~~
- 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; } }}