数据结构之第二章线性表

Posted 小油菜123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之第二章线性表相关的知识,希望对你有一定的参考价值。

1 线性表的顺序存储

          (1)线性表的顺序存储特点:逻辑上相连的元素,物理位置也相连。可随机访问表中元素,表中的存储位置可以用一个简单的,直观的公式表示,但是插入和删除都要移动大量的元素,效率不高,适合元素个数变化不大的情况,此时,如数据元素按照一定的顺序存储,则称为顺序存储的有序表,简称为    静态表。

            (2)线性表的动态分配顺序存储结构

 

typedef struct{
Elemtype  *elem;  //存储空间起始地址
int length;  //当前长度 
int listsize;  //当前分配容量
}Sqlist;

            (3)顺序表的基本操作-----(1)顺序表的插入

      

int listlink(PNODE head,int i,int e){//在顺序表head的第i个元素之前插入新的元素e
     if(i<0||i>=head.length) //插入位置不合法
               return 0;
     if(head.length>=head.listsize)//当前存储空间已满,增加空间
    {
         PNODE newbase=(PNODE)malloc(sizeof(NODE));//创建一个新的结点
         if(newbase==NULL)exit(-1);//存储分配失败
          head.elem=newbase;
          head.listsize++;//这里有毛病,应该改改
   }
//插入位置及之后的元素后移
 for(j=head.length-1;j>=i;j--){
       head.elem[j+1]=head.elem[j];
  }//这个的作用是找到它插入位置后一个元素
   head.elem[i]=e;//插入e
   ++head.length;//表长度增加1。
    return 1;
}

            (2)顺序表的删除

int  listdelete(PNODE head,int i,PNODE phead){
//head是这个链表的表名字,i是位置,phead是这个删除的节点的地址
     if(i<0||i>=head.length)
     return 0;
    phead=head.elem[i];//被删除的元素赋予给e
    for(j=i+1;j<head.length;j++)//被删除元素之后的与元素左移
    { head.elem[j-1]=head.length[j];}
    --head.length;//表的长度-1
    retun 1;
}



以上是关于数据结构之第二章线性表的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第二章线性表-第三节1:单链表的定义及其操作(插入和删除,建立之尾插和头插)

数据结构之第二章线性表

数据结构之第二章线性表之链式存储

数据结构之第二章线性表~~继续

数据结构学习小结2 (第二章:线性表)

数据结构第二章小结