• 第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

    循环链表

    在这里插入图片描述

    在这里插入图片描述

    双向链表

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

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

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

    小结

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

  • 相关阅读:
    Avalonia开发(一)环境搭建
    IDEA搭建ssm项目
    c语言练习95:练习使用双向链表(实现增删改查)
    【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER(二)
    Qt5开发从入门到精通——第四篇九节(调色板)
    大度型人格分析,性格大度的优劣势及职业规划
    【信息量判别块:语义监督:GAN:IVIF】
    坤坤的悲伤生活
    基于vue和node.js的志愿者招募网站设计
    MyBatis(二、基础进阶)
  • 原文地址:https://blog.csdn.net/m0_61504367/article/details/125420570