链表问题

马少华 2008-10-17 12:46:27

//EmpList.h
#pragma once

class EmpList
{
public:
EmpList(void);
~EmpList(void);
EmpList(int nID, char *name,char *sex,int age);
private:
Emp* EmpNode;
int m_length;

public:
bool Init();
bool Destroy();
bool Insert(int postion,Emp *emp);
bool Clear();
void ShowList();
int GetLength();
bool AddItem(Emp *emp);
void Sort();
Emp GetItem(int position);
void Remove(int position);
};

//EmpList.cpp
#include "StdAfx.h"
#include "EmpList.h"

EmpList::EmpList(void)
: EmpNode(NULL)
, m_length(0)
{
Init();
m_length = 0;
}

EmpList::EmpList(int nID, char *name,char *sex,int age)
{
Init();
EmpNode->empID = nID;
EmpNode->name = name;
EmpNode->sex = sex;
EmpNode->age = age;
m_length = 0;
}

EmpList::~EmpList(void)
{
Destroy();
}


bool EmpList::Init()
{
if(!(EmpNode = new Emp))
return false;
EmpNode->next = NULL;
return true;
}

bool EmpList::Destroy()
{
if(!Clear())
return false;
return true;
}

int EmpList::GetLength()
{
return m_length;
}

bool EmpList::AddItem(Emp *emp)
{
if(EmpNode == NULL)
return false;
int nPos = 0;
Emp *pTemp = EmpNode;
while(nPos < m_length && EmpNode->next != NULL)
{
pTemp = pTemp->next;
nPos++;
}
pTemp->next = emp;
emp->next = NULL;
m_length++;
return true;
}

bool EmpList::Clear()
{
if(EmpNode == NULL)
{
return false;
}

Emp *pTemp;
int nPos = -1;
while(nPos < m_length && EmpNode->next != NULL)
{
pTemp = EmpNode;
EmpNode = EmpNode->next;
delete pTemp;
nPos++;
}
return true;
}

bool EmpList::Insert(int postion, Emp *emp)
{
if(EmpNode == NULL)
return false;
Emp*pTemp = EmpNode;
int nPos = -1;
while(nPos < m_length && pTemp->next)
{
if(nPos == postion -1)
{
emp->next = pTemp->next;
pTemp->next = emp;
m_length++;
}
nPos++;
pTemp = pTemp->next;
}
return true;
}

Emp EmpList::GetItem(int position)
{
//if(EmpNode == NULL)
//return NULL;
int nPos = -1;
Emp *pTemp = NULL;
Emp *pTemp1 = EmpNode;
while(nPos < m_length && pTemp1->next)
{
if(nPos == position-1)
{
pTemp = pTemp1;
break;
}
else
{
nPos++;
pTemp1 = pTemp1->next;
}
}
return *pTemp;
}

void EmpList::Sort()
{
if(!EmpNode)
return;
for(int i=0; i<m_length;i++)
{
int b = i;
for(int j=i; j>=0; j--)
{
if(GetItem(b).empID < GetItem(j).empID)
{
Insert(b,&GetItem(j));
Remove(j);
b++;
}
}
}
}

void EmpList::Remove(int position)
{
if(EmpNode == NULL)
return;
int nPos = -1;
Emp *pTemp = EmpNode;
while(nPos < m_length && pTemp->next)
{
if(nPos == position)
{
pTemp->next = pTemp->next->next;
m_length--;
}
nPos++;
pTemp = pTemp->next;
}
}

void EmpList::ShowList()
{
if(!EmpNode->next)
return;
int nPos = 0;
Emp *pTemp = EmpNode->next;
for(int i=0; i<m_length; i++)
{
cout<<"第"<<nPos+1<<"个员工的信息:"<<endl;
cout<<"编号:"<<pTemp->empID<<endl;
cout<<"姓名:"<<pTemp->name<<endl;
cout<<"性别:"<<pTemp->sex<<endl;
cout<<"年龄:"<<pTemp->age<<endl;
pTemp = pTemp->next;
nPos++;
}
}

//StdAfx.h
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#ifndef _WIN32_WINNT // 允许使用特定于Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 将此值更改为相应的值,以适用于Windows 的其他版本。
#endif

#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;

typedef struct _employ
{
int empID;
char *name;
char *sex;
int age;
struct _employ *next;
}Emp;

// TODO: 在此处引用程序需要的其他头文件

// HomeWork.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "EmpList.h"

int _tmain(int argc, _TCHAR* argv[])
{
EmpList L;
Emp emp1,emp2,emp3;
emp1.empID = 1;
emp1.name = "mzs";
emp1.sex = "男";
emp1.age = 24;

emp2.empID = 6;
emp2.name = "aaa";
emp2.sex = "男";
emp2.age = 24;

emp3.empID = 4;
emp3.name = "ccc";
emp3.sex = "男";
emp3.age = 24;

//Emp emp1(1,"mzs","男",24);
//Emp emp2(2,"cl","男",24);
//Emp emp3(3,"jw","男",25);
L.AddItem(&emp1);
L.AddItem(&emp2);
L.AddItem(&emp3);
cout<<"****************************排序前***********************"<<endl;
L.ShowList();
L.Sort();
cout<<"****************************排序后***********************"<<endl;
L.ShowList();
return 0;
}

调试行后有三个问题,
1,没有排序(按empID)
2,头节点没有处理,
3,Clear有问题,
请高手帮我分析一下,最好详细一点。
...全文
213 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
马少华 2008-10-19
  • 打赏
  • 举报
回复
非常感谢hqin6
已经解决了一个很大的问题。
你说的第二点在我在struct里面加构造和析构函数的时候,链接的时候会报错;
太乙 2008-10-19
  • 打赏
  • 举报
回复


bool EmpList::Insert(int postion, Emp& emp)
{
if(EmpNode == NULL)
return false;
Emp* pTemp = NULL;
if(postion - 1 >= 0)
{
if(!(GetItem(postion-1,&pTemp)))
return false;
Emp* newNode = new Emp;
newNode = &emp;
newNode->next = pTemp->next;
pTemp->next = newNode;
m_length++;
return true;
}
else
{
Emp* newNode = new Emp;
newNode->name = emp.name;
newNode->age = emp.age;
newNode->empID=emp.empID;
newNode->sex=emp.sex;
newNode->next = EmpNode;
EmpNode = newNode;
m_length++;
return true;
}
}

请注意:
第一、在insert的else语句中,那个传过来的emp只是一个临时对象,insert返回后就被析构了。所以得自己new一个!手动赋值!

第二、在delete的时候,不同于free,会调用struct的析构函数,所以堆struct还要加一个析构函数!毕竟,struct里还有指针嘛!

太乙 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 evionmzs 的回复:]
还是Remove中的
delete那有问题。
[/Quote]

非也非也,是insert的问题!在insert之后,remove之前,那个链表就乱了!
马少华 2008-10-19
  • 打赏
  • 举报
回复
问题还没有解决,贴出我的最新代码。

//StdAfx.h
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#ifndef _WIN32_WINNT // 允许使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;

typedef struct _employ
{
int empID;
char *name;
char *sex;
int age;
struct _employ *next;
}Emp;

// TODO: 在此处引用程序需要的其他头文件


//EmpList.h
#pragma once

class EmpList
{
public:
EmpList(void);
~EmpList(void);
EmpList(int nID, char *name,char *sex,int age);
private:
Emp* EmpNode;
int m_length;

public:
bool Init();
bool Destroy();
bool Insert(int postion,Emp emp);
bool Clear();
void ShowList();
int GetLength();
bool AddItem(Emp *emp);
void Sort();
bool GetItem(int position,Emp **emp);
void Remove(int position);
};


//EmpList.cpp
#include "StdAfx.h"
#include "EmpList.h"

EmpList::EmpList(void)
: EmpNode(NULL)
, m_length(0)
{
Init();
m_length = 1;
}

EmpList::EmpList(int nID, char *name,char *sex,int age)
{
Init();
EmpNode->empID = nID;
EmpNode->name = name;
EmpNode->sex = sex;
EmpNode->age = age;
m_length = 1;
}

EmpList::~EmpList(void)
{
Destroy();
}


bool EmpList::Init()
{
if(!(EmpNode = new Emp))
return false;
EmpNode->next = NULL;
return true;
}

bool EmpList::Destroy()
{
if(!Clear())
return false;
return true;
}

int EmpList::GetLength()
{
return m_length;
}

bool EmpList::AddItem(Emp *emp)
{
if(EmpNode == NULL)
return false;
int nPos = 1;
Emp *pTemp = EmpNode;
while(nPos < m_length && EmpNode->next != NULL)
{
pTemp = pTemp->next;
nPos++;
}
pTemp->next = emp;
emp->next = NULL;
m_length++;
return true;
}

bool EmpList::Clear()
{
if(EmpNode == NULL)
{
return false;
}

Emp *pTemp;
while(EmpNode->next != NULL)
{
pTemp = EmpNode->next;
EmpNode->next = pTemp->next;
delete pTemp;
}
m_length = 0;
return true;
}

bool EmpList::Insert(int postion, Emp emp)
{
if(EmpNode == NULL)
return false;
Emp* pTemp = NULL;
if(postion - 1 >= 0)
{
if(!(GetItem(postion-1,&pTemp)))
return false;
Emp* newNode = new Emp;
newNode = &emp;
newNode->next = pTemp->next;
pTemp->next = newNode;
m_length++;
return true;
}
else
{
Emp* newNode = &emp;
newNode->next = NULL;
newNode->next = EmpNode;
EmpNode = newNode;
m_length++;
return true;
}
}

bool EmpList::GetItem(int position,Emp **emp)
{
if(EmpNode == NULL)
return false;
int nPos = 0;
Emp *pTemp = NULL;
Emp *pTemp1 = EmpNode;
while(nPos < m_length && pTemp1->next)
{
if(nPos == position)
{
break;
}
else
{
nPos++;
pTemp1 = pTemp1->next;
}
if(nPos != position)
return false;
}
*emp = pTemp1;
return true;
}

void EmpList::Sort()
{
if(!EmpNode)
return;
Emp *emp1 = new Emp;
Emp *emp2 = new Emp;
for(int i=0; i<m_length;i++)
{
int b = i;
for(int j=i+1; j>=0; j--)
{
if(!(GetItem(b,&emp1)&&GetItem(j,&emp2)))
return;
if(emp1->empID > emp2->empID)
{
//emp2->next = NULL;
Insert(j-1,*emp2);
Remove(j+1);
b++;
}
}
}
}

void EmpList::Remove(int position)
{
if(position < 1 || position > m_length)
return;
Emp *pTemp = NULL;
if(!GetItem(position - 1,&pTemp))
return;
Emp *pDel = NULL;
pDel = pTemp->next;
pTemp->next = pDel->next;
delete pDel;
m_length--;
}

void EmpList::ShowList()
{
if(!EmpNode->next)
return;
int nPos = 0;
Emp *pTemp = EmpNode;
for(int i=0; i<m_length; i++)
{
cout<<"第"<<nPos+1<<"个员工的信息:"<<endl;
cout<<"编号:"<<pTemp->empID<<endl;
cout<<"姓名:"<<pTemp->name<<endl;
cout<<"性别:"<<pTemp->sex<<endl;
cout<<"年龄:"<<pTemp->age<<endl;
pTemp = pTemp->next;
nPos++;
}
}

// HomeWork.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "EmpList.h"

int _tmain(int argc, _TCHAR* argv[])
{
EmpList L(100,"马俑","男",24);
Emp emp1,emp2,emp3;
emp1.empID = 1;
emp1.name = "mzs";
emp1.sex = "男";
emp1.age = 24;

emp2.empID = 6;
emp2.name = "aaa";
emp2.sex = "男";
emp2.age = 24;

emp3.empID = 4;
emp3.name = "ccc";
emp3.sex = "男";
emp3.age = 24;

//Emp emp1(1,"mzs","男",24);
//Emp emp2(2,"cl","男",24);
//Emp emp3(3,"jw","男",25);
L.AddItem(&emp1);
L.AddItem(&emp2);
L.AddItem(&emp3);
cout<<"****************************排序前***********************"<<endl;
L.ShowList();
L.Sort();
cout<<"****************************排序后***********************"<<endl;
L.ShowList();
return 0;
}
马少华 2008-10-19
  • 打赏
  • 举报
回复
仔细看了一下,好像和你的差不多了。
马少华 2008-10-19
  • 打赏
  • 举报
回复
把这个链表分成两部分,其中一部分必须有序(通常取出被排序目标的前两个元素)。然后将剩下的元素插入到上面有序链表合适的位置。
P_ghost 2008-10-19
  • 打赏
  • 举报
回复
何谓插入排序法?
马少华 2008-10-19
  • 打赏
  • 举报
回复
To:P_ghost
很好,很强大,运行没有问题,结果也正确。谢了。
但题目上要求的是插入排序法,能不能给个小例子?
P_ghost 2008-10-19
  • 打赏
  • 举报
回复
我给你简单改了一下,把头节点仅仅只表示链表头,不带数据信息的代码贴给你:

//StdAfx.h
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#ifndef _WIN32_WINNT // 允许使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;

typedef struct _employ
{
inline _employ():next(NULL),name(NULL),sex(NULL),empID(-1),age(-1){};
int empID;
char *name;
char *sex;
int age;
struct _employ *next;
}Emp;

// TODO: 在此处引用程序需要的其他头文件


//EmpList.h
#pragma once

class EmpList
{
public:
EmpList(void);
~EmpList(void);
EmpList(Emp& emp);
private:
Emp* EmpNode;
int m_length;

public:
bool Init();
bool Destroy();
bool Insert(int postion,Emp& emp);
bool Clear();
void ShowList();
int GetLength();
bool AddItem(Emp* emp);
void Sort();
bool GetItem(int position,Emp* &emp);
void Remove(int position);
};

//EmpList.cpp
#include "StdAfx.h"
#include "EmpList.h"

EmpList::EmpList(void)
: EmpNode(NULL)
, m_length(0)
{
Init();
}

EmpList::EmpList(Emp& emp)
{
Init();
EmpNode->next = &emp;
m_length++;
}

EmpList::~EmpList(void)
{
Destroy();
}


bool EmpList::Init()
{
if(!(EmpNode = new Emp))
return false;
m_length = 1;
return true;
}

bool EmpList::Destroy()
{
if(!Clear())
return false;
delete EmpNode;
m_length = 0;
return true;
}

int EmpList::GetLength()
{
return m_length-1;
}

bool EmpList::AddItem(Emp* emp)
{
if(EmpNode == NULL)
return false;
Emp *pTemp = EmpNode;
while(pTemp->next)
{
pTemp = pTemp->next;
}
pTemp->next = emp;
emp->next = NULL;
m_length++;
return true;
}

bool EmpList::Clear()
{
if(EmpNode == NULL)
{
return false;
}

EmpNode->next = NULL;
m_length = 1;
return true;
}

bool EmpList::Insert(int postion, Emp& emp)
{
if(EmpNode == NULL)
return false;
Emp* pTemp = NULL;
if(postion - 1 >= 0)
{
if(!(GetItem(postion-1,pTemp)))
return false;
emp.next = pTemp->next;
pTemp->next = &emp;
m_length++;
return true;
}
else
{
emp.next = EmpNode->next;
EmpNode->next = &emp;
m_length++;
return true;
}
}

bool EmpList::GetItem(int position,Emp* &emp)
{
if((EmpNode == NULL) || (EmpNode->next == NULL))
return false;
Emp *pTemp = EmpNode;
if((position > 0) && (position < m_length))
{
for(int i=0; i<position; i++)
{
pTemp = pTemp->next;
}
}
else
{
return false;
}
emp = pTemp;
return true;
}

void EmpList::Sort()
{
if(!EmpNode)
return;
Emp* emp1p = EmpNode;
Emp* emp1 = 0;
Emp* emp2p = 0;
Emp* emp2 = 0;
Emp* temp = 0;
for(int i=1; i<m_length;i++)
{
for(int j=i; j<m_length-1; j++)
{
emp1 = emp1p->next;
if(!GetItem(j, emp2p))
return;
emp2 = emp2p->next;
if(emp1->empID > emp2->empID)
{
if(emp2 != emp1->next)
{
temp = emp1->next;
emp1->next = emp2->next;
emp2->next = temp;
emp1p->next = emp2;
emp2p->next = emp1;
}
else
{
temp = emp2->next;
emp1p->next = emp2;
emp2->next = emp1;
emp1->next = temp;
}
}
}
if(!GetItem(i, emp1p))
{
return;
}
}
}

void EmpList::Remove(int position)
{
if(position < 1 || position >= m_length)
return;
Emp *pTemp = NULL;
if(!GetItem(position - 1,pTemp))
return;
Emp *pDel = NULL;
pDel = pTemp->next;
pTemp->next = pDel->next;
m_length--;
}

void EmpList::ShowList()
{
if(!EmpNode->next)
return;
Emp *pTemp = EmpNode->next;
for(int i=1; i<m_length; i++)
{
cout<<"第"<<i<<"个员工的信息:"<<endl;
cout<<"编号:"<<pTemp->empID<<endl;
cout<<"姓名:"<<pTemp->name<<endl;
cout<<"性别:"<<pTemp->sex<<endl;
cout<<"年龄:"<<pTemp->age<<endl;
pTemp = pTemp->next;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
Emp emp;
emp.empID = 100;
emp.name = "马俑";
emp.sex = "男";
emp.age = 24;
EmpList L(emp);
Emp emp1,emp2,emp3;
emp1.empID = 1;
emp1.name = "mzs";
emp1.sex = "男";
emp1.age = 24;

emp2.empID = 6;
emp2.name = "aaa";
emp2.sex = "男";
emp2.age = 24;

emp3.empID = 4;
emp3.name = "ccc";
emp3.sex = "男";
emp3.age = 24;

//Emp emp1(1,"mzs","男",24);
//Emp emp2(2,"cl","男",24);
//Emp emp3(3,"jw","男",25);
L.AddItem(&emp1);
L.AddItem(&emp2);
L.AddItem(&emp3);
cout<<"****************************排序前***********************"<<endl;
L.ShowList();
L.Sort();
cout<<"****************************排序后***********************"<<endl;
L.ShowList();
system("pause");
return 0;
}


测试了一下,没有什么问题。

排序用的方法就是用的简单的交换位置。
马少华 2008-10-19
  • 打赏
  • 举报
回复
P_ghost,感谢你的意见。代码是有问题,链表这东西我还不是很熟,
排序我是移植了一下数组的插入排序法。这个行不通么?
还有啊,有什么资料或书籍里面对堆栈介绍比较详细?我想了解一下底层的东西。
P_ghost 2008-10-19
  • 打赏
  • 举报
回复
首先,看你的代码
Clear()中,循环是没有必要的,因为你并不需要释放每一个节点,只需要把头节点的next置为NULL即可.
还有就是初始化的时候,既然头节点是new的,那么析构的时候就应该delete,而你的Destroy()中调用Clear()并没有释放掉头节点.
Insert()中Emp* newNode = new Emp; newNode = &emp;你在堆上创建了一个对象,为什么又要把指针指向栈中对象呢?我看你的链表实现的应该是对自动对象的链接,并不是动态创建节点,所以我觉得new是多余的,而且会造成泄漏的。而且参数应该改为引用,要不然就成了对临时对象操作了。而且你的Insert()实现的是后插入,那么根据你的Sort()自然不能排序了。
既然你的链表只是操作栈对象,那么Remove()中的delete就不应该要了,只需要修改next就可以了.
我想你的Sort()算法还很有问题,一是和Insert()配合不能实现排序,二是Remove()操作是干什么的?排序需要删除节点吗?
我也没有太仔细看你的代码,总之你的代码的问题比较多,希望我的说法能给你些帮助,有什么说得不对的地方还请原谅。
P_ghost 2008-10-19
  • 打赏
  • 举报
回复
首先,看你的代码
Clear()中,循环是没有必要的,因为你并不需要释放每一个节点,只需要把头节点的next置为NULL即可.
还有就是初始化的时候,既然头节点是new的,那么析构的时候就应该delete,而你的Destroy()中调用Clear()并没有释放掉头节点.
Insert()中Emp* newNode = new Emp; newNode = &emp;你在堆上创建了一个对象,为什么又要把指针指向栈中对象呢?我看你的链表实现的应该是对自动对象的链接,并不是动态创建节点,所以我觉得new是多余的,而且会造成泄漏的。而且参数应该改为引用,要不然就成了对临时对象操作了。而且你的Insert()实现的是后插入,那么根据你的Sort()自然不能排序了。
既然你的链表只是操作栈对象,那么Remove()中的delete就不应该要了,只需要修改next就可以了.
我想你的Sort()算法还很有问题,一是和Insert()配合不能实现排序,二是Remove()操作是干什么的?排序需要删除节点吗?
我也没有太仔细看你的代码,总之你的代码的问题比较多,希望我的说法能给你些帮助,有什么说得不对的地方还请原谅。
马少华 2008-10-17
  • 打赏
  • 举报
回复
好像insert后链表就成了一个无限长的死链表。
马少华 2008-10-17
  • 打赏
  • 举报
回复
还是Remove中的
delete那有问题。
scengion 2008-10-17
  • 打赏
  • 举报
回复
对了,确实不能在Remove中不能用delete,因为你Insert没有new, 还原remove后按照下面的方法改了再试

Insert(b,&GetItem(j));可能会出问题
最好把GetItem()的改成
Emp *EmpList::GetItem(int position)
{
//if(EmpNode == NULL)
//return NULL;
int nPos = -1;
Emp *pTemp = NULL;
Emp *pTemp1 = EmpNode;
while(nPos < m_length && pTemp1->next)
{
if(nPos == position-1)
{
pTemp = pTemp1;
break;
}
else
{
nPos++;
pTemp1 = pTemp1->next;
}
}
return pTemp;
}
==============================================
然后排序修改如下
void EmpList::Sort()
{
if(!EmpNode)
return;
for(int i=0; i <m_length;i++)
{
int b = i;
for(int j=i; j>=0; j--)
{
if(GetItem(b).empID < GetItem(j).empID)
{
Emp *pTemp2 = GetItem(b);
Remove(j);
Insert(j,pTemp2);
b = j;
}
}
}
}
这是emp按从小到大排序

马少华 2008-10-17
  • 打赏
  • 举报
回复
sort里面还是头节点的问题,把这句话
if(GetItem(b).empID < GetItem(j).empID)
改成
if(GetItem(b).next->empID < GetItem(j).next->empID)
就可以进入循环里面了,然后到remove里就出错误了。
马少华 2008-10-17
  • 打赏
  • 举报
回复
Remove运行到delete pTemp2程序就定住了。怎么回事?
pengzhixi 2008-10-17
  • 打赏
  • 举报
回复

void EmpList::Sort()
{
if(!EmpNode)
return;
for(int i=0; i<m_length;i++)
{
int b = i;
for(int j=i+1; j<m_length; j++)
{
if(GetItem(b).empID < GetItem(j).empID)
{
Insert(b,&GetItem(j));
Remove(j);
b++;
}
}
}
}



这样试下
scengion 2008-10-17
  • 打赏
  • 举报
回复
插入后你还得保证始终尾节点的指针域是NULL,好象你的insert成员函数里面没有做到
===================================================================
他的函数无法插入到尾节点,尾节点只能添加
pengzhixi 2008-10-17
  • 打赏
  • 举报
回复
EmpNode 未赋值
你应该将第一个节点初始化给EmpNode指针。
加载更多回复(11)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧