数据结构小结——链表

前面几篇讲了顺序表,是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中,重点是内存地址是连续的。而链表也是顺序表的一种,只不过存储空间在内存是不连续的,最终由指针将所有的节点连接起来构成一个顺序表

链表其实也很简单,只是多了一个连接下一个节点的指针,我们来看看它的结构:

typedef int LinkData;

typedef struct _node
{
    LinkData data;
    struct _node *next;
}Node;

这里的next就是指向下一个节点的指针,存储下一个节点的地址。

怎么来用呢,第一步肯定是要创建这个链表了,即给它分配空间:

int Create_List()
{
    Node *node = (Node *)malloc(sizeof(Node)/sizeof(char));
    if(node == NULL)
    {
        free(node);
        return FALSE;
    }
    return TRUE;
}

尾插法不难,这里就不给出来了,有点复杂的是在中间插入一个节点:

int Insert_Pos(Node *h, int pos, LinkData data)
{
    if (h == NULL || pos < 1)
        return FALSE;

    // 找要插入位置的前一个结点
    Node *tmp = h;
    int i;
    for (i = 0; i < pos-1; i++)
    {
        if (tmp == NULL)
            break;
        tmp = tmp->next;
    }

    if (tmp == NULL)   // 越界
    {
        printf("插入位置越界\n");
        return FALSE;
    }

    Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
    if (node == NULL)
    {
        return FALSE;
    }
    node->data = data;
    node->next = tmp->next;
    tmp->next  = node;

    return TRUE;
}

有插入当然就要有删除了。

int Delete_Pos(Node* h, int pos)
{
    if (h == NULL || pos < 1)
        return FALSE;

    // 找要插入位置的前一个结点
    Node *tmp = h;
    int i;
    for (i = 0; i < pos-1; i++)
    {
        if (tmp->next == NULL)
            break;
        tmp = tmp->next;
    }

    if (tmp->next == NULL)   // 越界
    {
        printf("删除位置越界\n");
        return FALSE;
    }

    Node *p = tmp->next;
    tmp->next = p->next;
    free(p);

    return TRUE;
}

代码就贴这么多了,就给几个片段,需要完整代码请直接下载(免积分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值