线性表的链式存储

心已入冬 提交于 2020-02-08 04:48:08

顺序存储结构的插入和删除需要移动大量元素,显然很浪费时间。如果用链表来创建线性表,让两个元素之间能够有联系,找到一个元素就能知道它的下一个元素的位置在哪里。
创建一个线性表的链表

typedef struct Node
{
    int data;  //数据域
    struct Node *next;  //指针域
}Node;
typedef struct Node *LinkList;

链表由数据域和指针域组成。

线性表-单链表

单链表的插入
操作如下:
在这里插入图片描述
代码如下:

int Linkinsert(LinList *L,int i,int e)
{
    int j;
    LinkList p,s;  //p为线性表L,s为新建的结点,数据域放入要插入的元素
    p=*L;
    j=1;
    while(p&&j<i)  //找到第i-1个节点
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i)
    {
        return ERROR;
    }
    s=(LinkList)malloc(sizeof(Node));  //为新节点申请空间
    s->data=e;
    s->next=p->next;
    p->next=s;
    return OK;
}

单链表的删除
操作如下:
在这里插入图片描述
代码如下

int LinkDelet(LinkList *L,int i,int e)
{
    int j;
    LinkList p,s;  //s用来表示将要删除的结点
    p=*L;
    j=1;
    while(p->next&&j<i)  //找到第i-1个结点
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i)
    {
        return ERROR;
    }
    s=p->next;
    p->next=s->next;
    e=s->data;
    free(s);
    return OK;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!