链表的头插法和尾插法的创建
链表是什么?
1.在数据结构中链表是基础的物理结构
2.在单链表中容易混搅的概念:首元结点,头指针,头结点
以这个单链表为例
首元结点是链表中存储第一个元素的结点也就是1号结点
头结点是首元结点前面的一个结点,可以不存储数据,也可以存储与数据元素相同的数据类型。
头指针是指向链表中第一个结点的指针,在这个表中指向的是头结点,
如果头结点不存在,那么头指针指向的就是首元结点。
链表的创建和一系列操作方法
1.头插法
typedef struct _Node
{
int data;
struct _Node *next;
}Node,*PNode;
/**传入一个指针,并以该指针为头节点创建链表*/
void NodeHead(PNode &H)
{
char sign='N';
H=new Node;//先申请内存地址
H->next=NULL;//先将头节点的next为空
do
{
PNode temp=new Node;
printf("请输入第%d个节点的值",++i);
scanf("%d",&temp->data);
temp->next=H->next;
H->next=temp;
getchar();
printf("是否继续N/Y");
scanf("%c",&sign);
}while(sign=='Y');
}
2.尾插法
typedef struct _Node
{
int data;
struct _Node *next;
}Node,*PNode;
/**传入一个指针,并以该指针为头节点创建链表*/
void NodeHead(PNode &H)
{
char sign='N';
H=new Node;//先申请内存地址
End=H;//头和尾巴重合
End->next=NULL;//先将尾节点的next为空
do
{
PNode temp=new Node;
printf("请输入第%d个节点的值",++i);
scanf("%d",&temp->data);
End->next=temp;
End=temp;//交换位置
getchar();
printf("是否继续N/Y");
scanf("%c",&sign);
}while(sign=='Y');
End->next=NULL;
}
总结
头插法的核心代码
temp->next=H->next;//每一个新创建的结点的next为NULL
H->next=temp; //让头结点的next指向新结点
头插法最后不用考虑让最后一个结点的next为NULL
因为有temp->next=H->next;
尾插法的核心代码
End->next=temp;//往后接结点
End=temp;//交换位置,为了使让End一直在最后。
上面创建方法的形参使用的 PNode &H
使用引用是因为需要修改内容