数据结构:链表的头插法和尾插法

0 人赞了该文章

没啥好多说的,直接看代码。(C)

数据结构头插:

在头节点的后面进行插入操作,后一个插入进来的值,在前一个插入进来的值与头节点之间。

代码如下:

#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
typedef  struct  Lnode
{
    int  data;
    struct Lnode  *next;
}Lnode,*LinkList;
void  Create_LinkTable(LinkList  &L)
{
    L = (LinkList)malloc(sizeof(Lnode));
    L->data = 0;
    L->next = NULL;
    printf("数字:");
    int  data;
    scanf("%d",&data);
    while (1)
    {
        if (data == 32767)  break;
        else
        {
            LinkList  p = (LinkList)malloc(sizeof(Lnode));
            p->data = data;
            p->next = L->next;
            L->next = p;//头插法
            scanf("%d",&data);
        }
    }
}
void  Travel(LinkList  L)
{
    LinkList p = L;
    while (p != NULL)
    {
        printf("%d", p->data);
        p = p->next;
    }
}
int main()
{
    LinkList  L;
    Create_LinkTable(L);
    Travel(L);
    return 0;
}

从结果可以看出,输入的数字1234,遍历时变成了4321。 尾插法:

设法找到插入结点的上一个结点,总而言之,尾插法就是要使后面插入的结点在前一个插入结点和NULL值之间。

代码如下:

#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
typedef  struct  Lnode
{
    int  data;
    struct Lnode  *next;
}Lnode,*LinkList;
void  Create_LinkTable(LinkList  &L)
{
    L = (LinkList)malloc(sizeof(Lnode));
    L->data = 0;
    L->next = NULL;
    printf("数字:");
    int  data;
    scanf("%d",&data);
    LinkList  fp = L;
    while (1)
    {
        if (data == 32767)  break;
        else
        {
            LinkList  p = (LinkList)malloc(sizeof(Lnode));
            p->data = data;
            fp->next = p;
            p->next = NULL;
            fp = p;//尾插法
            scanf("%d",&data);
        }
    }
}
void  Travel(LinkList  L)
{
    LinkList p = L;
    while (p != NULL)
    {
        printf("%d", p->data);
        p = p->next;
    }
}
int main()
{
    LinkList  L;
    Create_LinkTable(L);
    Travel(L);
    return 0;
}

从结果可以看出,输入为1234时,遍历的仍然是1234。


评论

暂无评论