单链表

来源:互联网 发布:send to kindle mac 编辑:程序博客网 时间:2024/06/04 18:04

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;则也会因为内存分配或者其他原因等,容易出错。

0 0