美文网首页
线性表的操作实现

线性表的操作实现

作者: Y丶舜禹 | 来源:发表于2020-04-08 16:16 被阅读0次

线性表的基本概念

除了第一个元素无直接前驱,最后一个元素无直接后续之外,其他每个数据元素都有个一个前驱或后继。

线性表的基本特点

 空表:如果线性表中的长度为0,则为空表

非空线性表和线性结构:

1.存在唯一一个被称作“第一个”的数据元素

2.存在唯一一个被称作“最后一个”的数据元素

3. 除了第一个之外,结构中每个数据元素均有一个前驱

4.  除了最后一个之外,结构中的每个元素均有一个后继

下面我们实现一个单向循环链表

1.定义结点

定义结点

2.初始化

初始化

3.插入元素

循环链表插入数据

```

StatusListInsert(LinkList*L,intplace,intnum){

    LinkListtemp ,target;

    inti;

    if(place ==1) {

        //如果插入的位置为1,则属于插入首元结点,所以需要特殊处理

        //1. 创建新结点temp,并判断是否创建成功,成功则赋值,否则返回ERROR;

        //2. 找到链表最后的结点_尾结点,

        //3. 让新结点的next 执行头结点.

        //4. 尾结点的next 指向新的头结点;

        //5. 让头指针指向temp(临时的新结点)

        temp = (LinkList)malloc(sizeof(Node));

        if(temp ==NULL) {

            returnERROR;

        }

        temp->data= num;

        for(target = *L; target->next!= *L; target = target->next);

        temp->next= *L;

        target->next= temp;

        *L = temp;

    }else

    {

        //如果插入的位置在其他位置;

        //1. 创建新结点temp,并判断是否创建成功,成功则赋值,否则返回ERROR;

        //2. 先找到插入的位置,如果超过链表长度,则自动插入队尾;

        //3. 通过target找到要插入位置的前一个结点, 让target->next = temp;

        //4. 插入结点的前驱指向新结点,新结点的next 指向target原来的next位置 ;

        temp = (LinkList)malloc(sizeof(Node));

        if(temp ==NULL) {

            returnERROR;

        }

        temp->data= num;

        for( i =1,target = *L; target->next!= *L && i != place -1; target = target->next,i++) ;

        temp->next= target->next;

        target->next= temp;

    }

    returnOK;

}

```

4.循环链表删除元素

```

Status  LinkListDelete(LinkList*L,intplace){

    LinkListtemp,target;

    inti;

    //temp 指向链表首元结点

    temp = *L;

    if(temp ==NULL)returnERROR;

    if(place ==1) {

        //①.如果删除到只剩下首元结点了,则直接将*L置空;

        if((*L)->next== (*L)){

            (*L) =NULL;

            returnOK;

        }

        //②.链表还有很多数据,但是删除的是首结点;

        //1. 找到尾结点, 使得尾结点next 指向头结点的下一个结点 target->next = (*L)->next;

        //2. 新结点做为头结点,则释放原来的头结点

        for(target = *L; target->next!= *L; target = target->next);

        temp = *L;

        *L = (*L)->next;

        target->next= *L;

        free(temp);

    }else

    {

        //如果删除其他结点--其他结点

        //1. 找到删除结点前一个结点target

        //2. 使得target->next 指向下一个结点

        //3. 释放需要删除的结点temp

        for(i=1,target = *L;target->next!= *L && i != place -1;target = target->next,i++) ;

            temp = target->next;

            target->next= temp->next;

            free(temp);

        }

    returnOK;

}

```

5.循环链表查询值

```

int findValue(LinkListL,intvalue){

    inti =1;

    LinkList p;

    p = L;

    //寻找链表中的结点 data == value

    while(p->data!= value && p->next!= L) {

        i++;

        p = p->next;

    }

    //当尾结点指向头结点就会直接跳出循环,所以要额外增加一次判断尾结点的data == value;

    if(p->next== L && p->data!= value) {

        return  -1;

    }

    return i;

}

```

相关文章

  • 数据结构基础学习之线性表

    线性表的学习 学习目标 线性表的定义 线性表的存储方式和表达方式 基本实现 基本操作实现 双向链表插入和删除实现 ...

  • 数据结构之线性结构

    线性表及其实现 什么是线性表? 谈到线性表,我们先来做个题目!用结构体数组表示一元多项式,并且实现加法操作。 大家...

  • 数据结构-线性表(顺序表和链表)

    大纲:理解线性表的逻辑结构掌握线性表的顺序存贮结构和链式存贮结构;掌握线性表基本操作的实现。了解线性表的应用。 线...

  • 线性表

    线性表的基本概念与实现 顺序表和链表的比较 顺序表的结构体定义和基本操作 链表的结构体定义和基本操作 线性表的基本...

  • 线性表的操作实现

    线性表的基本概念 除了第一个元素无直接前驱,最后一个元素无直接后续之外,其他每个数据元素都有个一个前驱或后继。 线...

  • 优先队列 priorityQueue

    优先队列有两种实现方式:线性表和二叉树的堆实现。 线性表有顺序表和链表的实现,但是无论如何都会有一个o(n)的操作...

  • 第二章 线性表

    主要讨论线性结构 2.1 线性表的类型定义及基本操作 线性表的类型定义 线性表的基本操作

  • 自己动手写数据结构之栈的实现

    栈的实现 1 定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这...

  • 数据结构浅析(三):线性表

    前言 什么是线性表?线性表的两大存储结构是什么?各种存储结构是如何实现存取、插入删除等操作的?本篇主要解答了这几个...

  • 二、栈和队列

    二、栈和队列 栈和队列都是线性结构,它们是操作受限的线性表,即它们的操作是线性表操作的子集。因此也可以用线性表在某...

网友评论

      本文标题:线性表的操作实现

      本文链接:https://www.haomeiwen.com/subject/rivtmhtx.html