标题:大家快来看一下这个C++的链表在连接是出问题了,求帮助啊!!!版主!!!
只看楼主
liuguanglei
Rank: 2
等 级:论坛游民
帖 子:41
专家分:26
注 册:2012-8-15
结帖率:80%
已结贴  问题点数:20 回复次数:7 
大家快来看一下这个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;
}
搜索更多相关主题的帖子: next private include public 
2012-11-26 23:54
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
得分:5 
cpp(39) : error C2065: 'M' : undeclared identifier

语法错误
2012-11-27 00:18
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
得分:5 
好多错误,cin都写成了cout..
2012-11-27 23:07
liuguanglei
Rank: 2
等 级:论坛游民
帖 子:41
专家分:26
注 册:2012-8-15
得分:0 
改完后编译能过,就是连接出问题啊!是不是我C++语法有错!但我还是找不出!
2012-11-27 23:09
liuguanglei
Rank: 2
等 级:论坛游民
帖 子:41
专家分:26
注 册:2012-8-15
得分:0 
你们用VC6.0试试改过后还是连接通不过啊
2012-11-27 23:13
liuguanglei
Rank: 2
等 级:论坛游民
帖 子:41
专家分:26
注 册:2012-8-15
得分:0 
回复 2楼 寒风中的细雨
版主给点力 啊!
收到的鲜花
  • 寒风中的细雨2012-11-28 08:44 送鲜花  10朵   附言:语法问题 我给力有啥用......
2012-11-27 23:15
liuguanglei
Rank: 2
等 级:论坛游民
帖 子:41
专家分:26
注 册:2012-8-15
得分:0 
回复 6楼 liuguanglei
再帮我看看呗!
2012-11-28 12:52
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
得分:10 

问题大大的啊!没有初始化的习惯。。这哪是链接错误啊。。。。。
还有你的表头指针在哪?
程序代码:
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删除节点  
直接p->next就来了,P你都没赋值啊!

相互帮助

2012-12-01 14:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-388561-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.717388 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved