大家快来看一下这个C++的链表在连接是出问题了,求帮助啊!!!版主!!!
#include<iostream>#include<malloc.h>
using namespace std;
typedef int Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
} LNode, *pLinkList;
//类的定义
class LinkList
{
private:
pLinkList pList;
int listLength;
public:
// LinkList();
// ~LinkList();
bool InitList();//初始化链表,创建一个头节点。
bool DestroyList();//销毁链表
bool ClearList();//将链表清空,释放当前所有节点。
bool IsEmpty();//判断链表是否为空。若为空,返回true,否则返回false。
int GetLength();//获取当前链表的长度
int LocateElem(int elem); //定位与指定数据相等的数据节点。
//如果在当前链表中已经存在该数据则返回该数据节点的索引号。
//若不存在这样的节点则返回0。
bool InsertNode(int beforeWhich, int data); //在链表中插入一个节点。
//插入的位置由beforeWhich指定,新节点插入在beforeWhich之前
bool DeleteNode(int data); //通过指定data删除节点
void PrintList();//打印链表中的所有元素
};
bool LinkList::InitList()
{
pLinkList q,p;//定义三个指针变量
int i;
int n;
int m;
pList=M;
pList=(pLinkList)malloc(sizeof(LNode));//先分配一个头节点
q=pList;//让Q指向头结点
cout<<"请输入你要创建的节点个数"<<endl;
cout<<n;
cout<<"请输入你要插入的节点";
for(i=0;i<n;i++)//进行节点之间的连接“采用从为尾部插入”
{
cin>>m;
p=(pLinkList)malloc(sizeof(LNode));
p->data=m;
q->next=p;
q=p;
}
return 1;
}
bool LinkList::ClearList()//进行链表的销毁
{
pLinkList q,p;
int i;
int n;
pList=(pLinkList)malloc(sizeof(LNode));
q=pList;
cout<<"请输入你要销毁的节点个数"<<endl;
cout<<n;
for(i=0;i<n;i++)//进行节点之间的连接“采用从为尾部插入”
{
p=(pLinkList)malloc(sizeof(LNode));
q->next=p;
p=q;
free(q);//进行逐个释放节点的操作
}
free(pList);
return 1;
}
bool LinkList::IsEmpty()//判断链表是否为空。若为空,返回true,否则返回false
{
pLinkList q,p;//定义三个指针变量
int i;
int n;
cout<<"请输入你要检查的表的个数"<<endl;
cout<<n;
for(i=0;i<n;i++)
{
q->next=p;
p=q;
if(q->data==NULL)
cout<<"表为空!";
else
cout<<"表不为空!";
}
return 1;
}
int LinkList::GetLength()//获取当前链表的长度
{
pLinkList q,p;//定义三个指针变量
int i;
int n;
int m=0;
cout<<"请输入你要打印的节点个数"<<endl;
cin>>n;
for(i=0;i<n;i++)
{
q->next=p;
p=q;
m++;
}
cout<<m;
return 1;
}
int LinkList::LocateElem(int elem)
{
pLinkList q,p;//定义三个指针变量
int i;
int n;
cout<<"请输入你要打印的节点个数"<<endl;
cin>>n;
for(i=0;i<n;i++)
{
q->next=p;
p=q;
if(q->data==elem)
cout<<q->data;
}
return 1;
} //定位与指定数据相等的数据节点。
//如果在当前链表中已经存在该数据则返回该数据节点的索引号。
//若不存在这样的节点则返回0。
bool LinkList::InsertNode(int beforeWhich, int data)
{
pLinkList p;
pLinkList Q;//定义三个指针变量
int i;
p=pList;
for(i=1;i<=beforeWhich;i++)//在连表中寻找要插入的位置
{
p=p->next;
}
Q=(pLinkList)malloc(sizeof(LNode));
Q->data=data;
Q->next=p->next;//然后进行节点的插入
p->next=Q;
return 1;
}
//插入的位置由beforeWhich指定,新节点插入在beforeWhich
bool LinkList::DeleteNode(int data)
{
pLinkList p,q;
pLinkList Q;//定义三个指针变量
int i;
p=pList;
for(i=1;i<=data;i++)//在连表中寻找要删除的借点位置
{
p=p->next;
}//然后进行节点的插入
q=p->next;
p->next=q->next;
free(q);
return 1;
}//通过指定data删除节点
void LinkList::PrintList()
{
pLinkList q,p;//定义三个指针变量
int i;
int n;
cout<<"请输入你要打印的节点个数"<<endl;
cin>>n;
for(i=0;i<n;i++)
{
q->next=p;
p=q;
cout<<q->data;
}
}//打印链表中的所有元素
int main()
{
LinkList a1;
int m;
int n;
int k;
int y;
int j;
cout<<" 单链表基本操作实验 "<<endl;
cout<<"*****************************************************"<<endl;
cout<<"请选择命令序号(0-7): *"<<endl;
cout<<"1创建链表; *"<<endl;
cout<<"2清除链表; *"<<endl;
cout<<"3链表删除; *"<<endl;
cout<<"4插入的位置和插入元素; *"<<endl;
cout<<"5判断链表是否为空; *"<<endl;
cout<<"6进行配对; *"<<endl;
cout<<"7删除的节点位置; *"<<endl;
cout<<"0程序结束. *"<<endl;
cout<<"*****************************************************"<<endl;
while(1)
{
cin>>j;
switch(j)
{
case 1:
cout<<"创建连表"<<endl;
a1.InitList();;break;
case 2:
cout<<"清除连表"<<endl;
a1.ClearList();;break;
case 3:
a1.DestroyList();
cout<<"销毁链表!"<<endl;;break;
case 4:
cout<<"请输入要插入的位置和插入的元素"<<endl;
cin>>n>>k;
a1.InsertNode(n,k);;break;
case 5:
cout<<"检查链表是佛为空";
a1.IsEmpty();;break;
case 6:
cout<<"输入要进行配对的数";
cin>>y;
a1.LocateElem(y);;break;
case 7:
cout<<"请输入要删除的节点位置"<<endl;
cin>>m;
a1.DeleteNode(m);;break;
case 8: a1.GetLength();;break;
}
}
return 1;
}