• 第2章 线性表


    2.1 线性表的逻辑结构

    在这里插入图片描述
    在这里插入图片描述

    2.2 线性表的顺序存储结构

    在这里插入图片描述
    在这里插入图片描述
    顺序表:随机存取(访问、读写)
    链 表:顺序存取
    在这里插入图片描述

    typedef int ElemType;
    #define MAXSIZE 100          /*数组最大空间*/
    typedef  struct{
         ElemType data[MAXSIZE]; /*表中元素用数组存放/
         int  length;           /*表长度(表中有多少个元素)*/
         
    }SqList;                    /*顺序表的类型*/
    
    Sqlist s1,s2;
    s1.data[i-1]=90
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    顺序表的基本操作实现(代码实现)

    • 初始化
    • 插入
    • 删除
    • 查找

    应用举例

    在这里插入图片描述
    在这里插入图片描述

    顺序表算法的时间复杂度分析

    在这里插入图片描述

    线性表小结

    在这里插入图片描述
    在这里插入图片描述

    2.3 线性表的链式表示和实现

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    (1)单链表的建立

    尾插法

    在这里插入图片描述
    在这里插入图片描述

    头插法

    在这里插入图片描述

    LinkList createLinkList1() //头插法建立带表头结点的单链表
    {  LNode *L,*s; //L头指针, s指向新结点
       L=(LNode *) malloc(sizeof(LNode)); //申请空白结点,L指向头结点                
        
       L->next =NULL;   //建立了头结点
       for(i=26;i>=1;i--)
       {  s=(LNode *) malloc(sizeof(LNode)); //申请空白结点,s指向
       if (!s) return NULL;                	
    	     s->data=i+‘a’-1;     //给s->data 赋值
    	    s->next=L->next;     L->next =s;    //s指向的结点插入头结点后面
    	 }
       return L;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (2)单链表的查找和输出

    在这里插入图片描述
    在这里插入图片描述

    bool GetElem1(LinkList L, int i, ElemType *e)
    { //读取带表头结点的单链表L的第i个数据元素
        LNode *p=L->next;    //从头指针开始
        int j=1;         
        while(p&&j<i)   //查找第i个元素
        {  p=p->next; 
           j++; 
        }
        if( !p || j>i ) return false; //第i个元素不存在,i>n或i<1
        *e=p->data; 
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    (3)单链表的插入

    在这里插入图片描述
    在这里插入图片描述

    (4)单链表的删除

    在这里插入图片描述

    应用举例

    在这里插入图片描述
    在这里插入图片描述

    LinkList mergeDList(LinkList La,LinkList Lb)
    { 
      LinkList Lc;  
      LNode *pa,*pb,*pc,*pt;
      int tmp;
      pa=La->next ;  pb=Lb->next ;
      pc=(LNode*) malloc(sizeof(LNode));
      if (!pc) return NULL;
      Lc=pc;
    
      while (pa&&pb)//依次比较
      { 
        pt=(LNode*)malloc(sizeof(LNode));
        tmp=compare(pa->data ,pb->data);
        if (tmp==-1 ||tmp == 0)
           {  pt->data=pa->data ;  pa=pa->next ; }
        else //tmp==-2
           {	pt->data=pb->data ;   pb=pb->next ; }
        pc->next =pt;   pt->next =NULL; //插入Lc表尾 
        pc=pc->next;
      }
      
    pa=pa?pa:pb;                 
      while (pa)//不空的表,剩余元素插入Lc
      {
        pt=(LNode*)malloc(sizeof(LNode));
        pt->data=pa->data ;
        pc->next =pt;   pt->next =NULL;
        pa=pa->next ;  pc=pc->next;
      }
     return Lc;
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/d3ad08ff79f64355a9976bff4590daa8.png)
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    循环链表

    在这里插入图片描述

    在这里插入图片描述

    双向链表

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    应用实例:一元多项式的表示及相加

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    小结

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    MySQL explain SQL分析工具详解与最佳实践
    标准lua和luajit的一个代码测试对比
    Vue 3.0 + vite + axios+PHP跨域问题的解决办法
    数学建模 -- 灰色预测模型
    计算机毕业设计node.js+vue+Element企业员工信息管理系统
    Nginx 部署vue项目 (Windows版)
    网工知识角|什么是防火墙你知道吗?一篇直接搞懂
    ASM字节码插桩解决国内隐私问题
    K8S云计算系列-(4)
    oracle OCP OCM MySQL OCP认证难吗?
  • 原文地址:https://blog.csdn.net/m0_61504367/article/details/125420570