静态链表

用数组描述的链表叫做静态链表

我们让数组的元素都是由两个数据域组成,data和cur。也就是说,数组的每个下标都对应一个data和一个cur。数据域data,用来存放数据元素,也就是通常我们要处理的数据;而cur相当于单链表中的next指针,存放该元素的后继在数组中下标,我们把cur叫做游标。

/*线性表的静态链表存储结构*/

#define MAXSIZE 1000

typedef struct {

    ElemType data;

    int cur;          /*游标(Cursor),为0时表示无指向*/

} Component,StaticLinkList[MAXSIZE];

我们对数组第一个和最后一个元素作为特殊元素处理,不存数据。我们通常把未使用的数组元素称为备用链表。而数组第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;二数组的最后一个元素的cur则存放第一个有数值元素的下标,相当于单链表中的头结点作用,当整个链表为空时,则为0。

/*将一维数组space中各分量链成一备用链表,space[0].cur为头指针,“0”表示空指针*/

Status InitList(StaticLinkList  space) {

     int  i;

     for(i = 0; i < MAZSIZE-1; i++)

          space[i] = i+ 1;

      space[MAXSIZE-1].cur = 0;/*目前静态链表为空,最后一个元素的cur为0*/

      return OK;

}

静态链表的插入操作

静态链表中要解决的是:如何用静态模拟动态链表结构的存储空间的分配,需要时申请,无用时释放。

我们需要自己实现这两个函数,才可以做插入和删除的操作。

/*若备用空间链表非空,则返回分配的结点下标,否则返回0*/

int  Malloc_SLL(StaticLinkList space) {

       int i = space[0].cur;/*当前数组第一个元素的cur存的值,就是要返回的第一个备用空闲的下标*/

      if (space[0].cur) {

          space[0].cur = space[i].cur;/*由于要拿出一个分量来使用了,所以我们就得把它下一个分量用来备用*/

      return i;

}

/*在L中第i个元素之前插入新的数据元素e*/

Status  ListInsert(StaticLinkList L, int i, ElemType e){

     int j,k,l;

     k = MAX_SIZE - 1;/*注意k首先是最后一个元素的下标*/

    if(i < 1 || i > ListLength(L) + 1)

               return ERROR;

     j=Malloc_SSL(L);/*获得空闲分量的下标*/

     if(j) {

            L[j].data = e;/*将数据赋值给此分量的data*/

            for(l = 1; l <= i - 1; l++)/*找到第i个元素之前的位置*/

                       k =L[k].cur;

             L[j].cur = L[k].cur;/*把第i个元素之前的cur赋值给新元素的cur*/

             L[k].cur = j;/*把新元素的下标赋值给第i个元素之前元素的cur*/

             return OK;

         }

         return ERROR;

}

静态链表的删除操作

/*删除在L中第i个数据元素e*/

Status ListDelete(StaticLinkList L, int i) {

     int j,k;

     if(i < 1 || i > ListLength(L))

           return ERROR;

      k =MAXSIZE - 1;

      for(j = 1; j <= i - 1; j++)

           k =L[k].cur;

      j=L[k].cur;

      L[k].cur = L[j].cur;

       Free_SSL(L, j);

        return  OK;

}

/*将下标为k的空闲结点回收到备用链表*/

void  Free_SSL(StaticLinkList space, int k) {

     space[k].cur  =  space[0].cur;/*把第一个元素的cur值赋值给要删除的分量cur*/

     space[0].cur  = k;/*把要删除的分量下标赋值给第一个元素的cur*/

}

获取静态链表长度

/*初始条件:静态链表L已存在。操作结果:返回L中数据元素个数*/

int ListLength(StaticLinkList L) {

    int j = 0;

    int i  =L[MAXSIZE - 1].cur;

     while(i) {

           i= L[i].cur;

           j++;

       }

        return j;

}

静态链表优缺点

优点:在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。

缺点:没有解决连续存储分配带来的表长难以确定的问题。失去了顺去存储结构随机存取的特性。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容