C语言 严蔚敏数据结构 线性表之链表实现

  博主最近在考成都大学皇家计算机科学与技术专业,复习专业课数据结构,正好学习到线性结构中的线性表用链表这种存储结构来实现。

  首先,数据结构包括1、数据的操作2、逻辑结构3、存储结构(数据结构三要素。

  直接上代码,现阶段代码实现功能有:链表初始化、遍历、增、删、返回链表长度,后续功能陆续发布。其中肯定有很多问题,希望各位码哥留言。

Linklist* InitList(int i)//i为链表大小
{
    Linklist *head;
    head = (Linklist*)malloc(sizeof(Linklist));
    Linklist *end=head;
    int j = 0;
    for (j = 0;j < i;j++)
    {
        Linklist *node = (Linklist*)malloc(sizeof(Linklist));
        scanf("%d", &node->data);
        end->next = node;
        end = node;
    }
    end->next = NULL;
    return head;
}
int GetLenLinklist(Linklist *head)//获取带头结点链表长度
{
    int length;
    Linklist *p;
    p = head;
    for (length = 0;p->next != NULL;length++)
    {
        p = p->next;
    }
    return length;
}
void LinklistMap(Linklist *head,int length)//遍历整个链表
{
    Linklist *p;
    p = head->next;
    int i;
    for (int i=0;i<length;i++)
    {
        printf("第%d个值为%d", i+1 , p->data);
        p = p->next;
    }
}
void InsertLinkList(Linklist *head,int i,int data)//在第i个结点后插入 一个结点
{
    Linklist *p = head;
    int j = 0;
    while (p->next!=NULL&&j < i - 1)
    {
            p = p->next;
            ++j;
    }
    if (!p || j > i - 1)
        printf("当前链表为空");
    else
    {
        Linklist *node = (Linklist*)malloc(sizeof(Linklist));
        node->data = data;
        node->next = p->next;
        p->next = node;
    }
}
void DelLinklist(Linklist *head, int data)//删除结点值=data的结点。
{
    Linklist *p, *q;
    q = head;
    p = head->next;
    while (p->next != NULL && p->data != data)
    {
        p = p->next;
        q = q->next;
    }
    if (p->data!=data&&p->next == NULL)
        printf("链表中无此节点");
    else
    {
        q->next = p->next;
        free(p);
    }
}//还未实现多个结点==某个值

后续即将更新,再插入和删除操作中,记住赵海英老师上课的话,先连接,后删除!

本博客唯一解释权:成都大学信息科学与工程学院学习委员雷雷提

posted @ 2019-05-08 09:05  雷雷提  阅读(528)  评论(0编辑  收藏  举报