include "stdafx.h"
using namespace std;
//单链表结构体
typedef struct LNode
{
int ID;
char Name[1024];
struct LNode *next;
}LinkList, *pLinkList;
pLinkList HeadNode;//链表表头
void LineInsert(pLinkList link, int ID, int newID, char* newName);
void LineCreate();
void LineRead();
int _tmain(int argc, _TCHAR* argv[])
{
LineCreate();
LineRead();
return 0;
}

//函数功能:单链表的插入,在ID为i的对应结构体之后插入另一个结构体
void LineInsert(pLinkList link, int ID, int newID, char* newName)
{
pLinkList p = link;
while ((p->ID != ID)&&(p->next != NULL) )
{
p=p->next;
}
if (p->ID == ID)
{
pLinkList NewNumber = new LinkList;
NewNumber->ID= newID;
//NewNumber->Name = newName;(此处编译出错,改用下句)
strcpy(NewNumber->Name,newName);
NewNumber->next = NULL;
if (p->next != NULL)
{
NewNumber->next = p->next;
}
p->next = NewNumber;
}
return;
}
//函数功能:链表的建立,用尾插法建立单链表
void LineCreate()
{
pLinkList firstNode,LastNode;
firstNode=(pLinkList) malloc(sizeof(LinkList));
firstNode->next = NULL;
LastNode = firstNode;
HeadNode = firstNode;
char buffer[1024];
int ID;
cout<<"输入ID值 : ";
while (scanf_s("%d",&ID) != EOF)
{
cout<<"输入name值 : ";
scanf("%s",&buffer);
pLinkList P = (pLinkList)malloc(sizeof(LinkList));
strcpy(P->Name,buffer);
P->ID = ID;
P->next = NULL;
LastNode->next = P;
LastNode = P;
cout<<endl;
cout<<"输入ID值 : ";
}
return;
}
//函数功能:链表的读取(第一个节点未存数据)
void LineRead()
{
pLinkList p = HeadNode;
do
{
p = p->next;
cout<<"Name = "<<p->Name<<"ID = "<<p->ID<<endl;
} while (p->next!= NULL);
return;
}

//单链表的删除(删除第x个节点)
bool LineDelete(int x)
{
pLinkList p, pre; //pre为前驱结点,p为查找的结点
p = HeadNode;
int i = 0;
while ((p->next != NULL)&&(i != x))
{
pre = p; //将p指到将要删除的节点上
p = p->next;
++i;
}
if (i==x)
{
pre->next = p->next; //删除操作,将其前驱next指向其后继
free(p);
return true;
}
else return false;
}
错误记载:
1、error C2440: “=”: 无法从“char *”转换为“char [1024]”
在C语言中数组是不容许整体复制的!
故:
NewNumber->Name = newName;
这样是不正确的;
表明上看这句话只是把一个地址给他,实际上要求的是数组的整体复制。
2、若数据结构中不是name【1024】,而是char* name;则也会因为内存分配或者其他原因等,容易出错。