美文网首页数据结构
2023-03-31 数据结构【四】线性表,单链表,双链表,顺序

2023-03-31 数据结构【四】线性表,单链表,双链表,顺序

作者: ForestPei | 来源:发表于2023-03-30 23:40 被阅读0次

2.4 刪除

2.4.1 线性表

Status ListDelete_Sq(SqList &L,int i,ElemType &e){      //算法2.4 顺序表的删除
    //在顺序表L中删除第i个元素,并用e返回其值
    //i值的合法范围是1<=i<=L.length
    if(i<1 || i>L.length)   return ERROR;       //i值不合法
    e=L.elem[i-1];                              //将欲删除的元素保留在e中
    for(int j=i;j<=L.length;j++)                
        L.elem[j-1]=L.elem[j];                  //被删除元素之后的元素前移
    --L.length;                                 //表长减1
    return OK;
}

2.4.2 单链表

Status ListDelete_L(LinkList &L,int i,ElemType &e){     //算法2.9 单链表的删除
    //在带头结点的单链表L中,删除第i个位置,并由e返回值
    LNode *p,*q;
    int j;
    p=L;j=0;
    while(p->next && j<i-1){p=p->next;++j;}     //寻找第i-1个结点
    if(!(p->next) || j>i-1)     return ERROR;   //i大于表长+1或者小于1
    q=p->next;                                  //临时保存被删结点的地址以备释放
    p->next=q->next;                            //改变删除结点前驱结点的指针域
    e=q->data;                                  //保存删除结点的数据域
    delete q;                                   //释放删除结点的空间
    return OK;
}       

2.4.3 双链表

Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e){     //算法2.13 双向链表的删除
    //删除带头结点的双向链表L中第i个位置之前插入元素e,i的合法值为1<=i<=表长
    DuLNode *p;
    if(!(p=GetElemP_DuL(L,i)))              //在L中确定第i个元素的位置指针p
        return ERROR;                       //p为NULL时,第i个元素不存在
    e=p->data;                              //保存被删结点的数据域
    p->prior->next=p->next;                 //修改被删结点的前驱结点的后继指针
    p->next->prior=p->prior;                //修改被删结点的后继结点的前驱指针
    delete p;                               //释放被删结点的空间
    return OK;
}                                           //ListDelete_DuL

2.4.4 顺序栈

//算法3.3 顺序栈的出栈
Status Pop(SqStack &S,SElemType &e)
{// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    if(S.base == S.top)
        return ERROR;//栈空
    e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e
    return OK;
}
//算法3.4 取顺序栈的栈顶元素
Status GetTop(SqStack S,SElemType &e)
{// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
    if(S.top == S.base)
        return ERROR;
    e = *(S.top-1);//栈顶指针减1,将栈顶元素赋给e
    return OK;
}

2.4.5 链栈

//算法3.7 链栈的出栈
Status Pop (LinkStack &S,SElemType & e)
{   // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
        SNode *p;
        if(!S)
        return ERROR;
        e = S->data;//将栈顶元素赋给e
        p = S;
        S = S->next;//修改栈顶指针
        delete p;//释放原栈顶结点空间
        return OK;
}

2.4.6 循环队列

//算法3.16 循环队列的出队
Status DeQueue(SqQueue &Q,QElemType &e)
{
    if(Q.rear == Q.front)
    {
        return ERROR;
    }
    e = Q.base[Q.front];
    Q.front = (Q.front+1)%MAXQSIZE;
    return OK;
}

2.4.7 链队

//算法3.19 链队的出队
Status DeQueue(LinkQueue &Q,QElemType &e)
{//删除Q的队头元素,用e返回其值,并返回OK
    if(Q.front == Q.rear)
    {
        return ERROR;   //若队列空,则返回 ERROR
    }
    QNode *p = Q.front->next;//p指向队头元素
    e = p->data;//e保存队头元素的值
    Q.front->next = p->next;//修改头指针
    if(Q.rear == p)
    {
        Q.rear = Q.front;//最后一个元素被删,队尾指针指向头结点
    }
    delete p;
    return OK;
}

二叉树的遍历
先序遍历:
1)访问根结点;
2)先序遍历左子树;
3)先序遍历右子树。
递归
非递归
中序遍历:
1)中序遍历左子树;
2)访问根结点;
3)中序遍历右子树。
递归
非递归
后序遍历:
1)后序遍历左子树;
2)后序遍历右子树;
3)访问根结点。
递归
非递归
层次遍历:
若树为空,则什么都不做直接返回。
否则从树的第一层开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
线索二叉树
N个结点的二叉链表,每个结点都有指向左右孩子的
结点指针,所以一共有2N个指针,而N个结点的二叉
树一共有N-1条分支,也就是说存在2N-(N-1)=N+1个空指针。比如左图二叉树中有6个结点,那么就有7个空
指针。

大量的空余指针能否利用起来?

指向前驱和后继的指针称为线索,加上线索的二叉链表就称为线索链表,相应的二叉树就称为线索二叉树
对二叉树以某种次序遍历使其变为线索二叉树的过程就叫做线索化

相关文章

  • 数据与算法结构

    线性表 顺序表 链表(物理上离散,逻辑上连续) 链表的类别 单链表 循环链表 双链表 链表的操作 顺序表与链表的比...

  • 线性表之顺序表和链表(单/双链表,单/双循环链表)

    线性表按存储方式分为顺序表和链表两种,其中链表又分为单链表,循环链表,双链表,双向循环链表。 顺序表 顺序表采用顺...

  • 数据结构笔记

    数据结构课程概览 ================== 1.顺序表 2.链表:单链表,单向循环链表,双链表...

  • 专项练习数据结构之链表

    1.链表:单链表,双链表,循环链表 2.单链表 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表...

  • 常见数据结构和算法

    常见数据结构 线性数据结构(按顺序具有数据元素的数据结构):数组,堆栈,链表(单链表 双链表),队列非线性数据结...

  • 顺序表与单链表

    接口 顺序表(线性表)实现方式 单链表的节点 单链表的实现

  • 数据结构与算法---线性表

    前言 这篇文章会介绍线性表的内容,其中线性表是1对1的逻辑结构,分别有 顺序表,单链表,单向循环链表,双向链表,双...

  • 线性表

    1.线性表 1.1 顺序表(顺序存储) 静态分配 动态分配 1.2 单链表 单链表定义 不带头节点的单链表插入操作...

  • PHP 实现数据结构

    参考诸多视频和文章,主要通过PHP 实现线性表的顺序存储结构,单链表,静态链表,双向链表以及二叉树等数据结构,代码...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

网友评论

    本文标题:2023-03-31 数据结构【四】线性表,单链表,双链表,顺序

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