链表的实用操作函数

单向链表的操作

/*链表节点声明*/

typedef struct listnode *listpointer;

struct listnode {

    int date;

// element else

    listpointer link;

}listnode;

1/ 反转 invert

listpointer invert ( listpointer lead)

{ /* invert the list pointed to by Lead * /

listPointer middle, trail;

middle = NULL;

white (Iead) {

trail = middle;

middle = lead;

Iead = lead->link;

middle->link = trail;

}

return middle;

}

2/连接 concatenate

/* produce a new list that contains the list ptr1 followed by the

Iist ptr2. The list pointed to by ptr1 was changed permanently */

listpointer concatenate(listpointer ptr1, listpointer ptr2)

{

Iistpointer temp ;

/* check for empty lists */

if ( !ptr1) return ptr2 ;

if (!ptr2) return ptr1 ;

/* neither list is empty, find end of first list */

for (temp=ptr1; temp->Iink; temp=lemp->Iink) ;

/* link end of first list to start of second */

temp->link = ptr2;

}

循环链表的操作

1/ 循环链表表头插入

last指向表尾,而不指向表头。这样设置链表指针可以方便地在表头、表尾插入结点。如杲设置指向表头的指针,那么在表头前插入结点效率极低,我们必须从头遍历整个链表,直 到指针移到表尾,然 后才能在表头前插入。

下面的代码在循环链表表头插入结点。

/* insert node at the front of the circular list whose last node is

last * /

void insertFront (listPointer *last, listPointer node)

{

/* list is empty, change Last to point to new entry */

if (!(*Iast)) {

*last = node;

node->Iink = node;

}

else {

/* list is not empty, add new entry at front */

node->Iink = (*last) ->link;

(*last) ->link = node;

}

}

2/ 循环链表表尾插入

/* insert node at the end of the circular list whose last node is

last * /

void insertend (listPointer *last, listPointer node)

{

/* list is empty, change Last to point to new entry */

if (!(*Iast)) {

*last = node;

node->Iink = node;

}

else {

/* list is not empty, add new entry at end */

node->Iink = (*last) ->link;

(*last) ->link = node;

(*last) = node;

}

}

3/ 循环链表的长度

int length (listpointer last )

{ /* find the length of the circular list last */

listpointer temp;

int count = 0;

if (last) {

  temp = Iast;

  do{

        count++;

        temp = temp->link;

  }while (temp!=last);

}

return count;

}

双向链表的操作

      双向链表的结点至少有三个域,数据域 data,左链域 llink,右链域 rlink,结点声明 如下:

typedef struct node *nodepointer;

struct node {

    element data;

    nodepointer llink;

    nodepointer rlink;

};

注: 双向链表也可以设成循环表,包括一个空表头。

‌1. 插入

      函数 dinsert完成插入操作,node足 表中纣i点,可 以足头结点,也可以楚内点,newnode是待插入结点。

void dinsert (nodepointer node, nodepointer newnode)

{ /* insert newnode to the right of node */

newnode->Ilink = node;

newnode ->rIink = node ->rlink ;

node->rlink->llink = newnode;

node->rlink = newnode;

}

‌2.删除

void ddelete (nodePointer head, nodePointer deleted)

{ /*delete the node of 'deleted' with the first null_node of head*/

if (node==deleted)

    printf ("Delete the only node of head is          not permites");

else {

    deleted->llink->rIink = deleted->rIink;

    deleted->rIink->llink = deleted->IIink;

    free (deleted) ;

  }

}

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

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,251评论 0 16
  • 链表 概念 说到链表,coder们都不会陌生,在日常开发中或多或少都会用到它。它是链式存储的线性表,简称链表。链表...
    扈扈哈嘿阅读 2,074评论 0 5
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,716评论 0 33
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,838评论 0 2
  • 今天早上有课,所以早早起床,因为担心头发的影响,所以在所剩无几的时间里匆匆的洗了一个头,顿时感觉世界都清新了。 走...
    书写平凡的世界阅读 219评论 0 0