美文网首页程序员数据结构和算法分析
王道数据结构 第二章 线性表(3) 编程题下半部分

王道数据结构 第二章 线性表(3) 编程题下半部分

作者: 球球球球笨 | 来源:发表于2018-02-09 09:16 被阅读0次
  1. 假设有两个元素值按递增次序排列的线性表,均以单链表形式存储,编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
    (考虑到使用递减排列,故使用头插法)
void unionDesc(linkList L1, linkList L2) {
    linkList p1 = L1->pNext, p2 = L2->pNext;
    linkList temp = nullptr;
    L1->pNext = nullptr; //任选其中一个链表的头部作为头指针
    while (p1 && p2) {
        if (p1->data <= p2->data) {
            temp = p1->pNext;
            p1->pNext = L1->pNext;
            L1->pNext = p1;
            p1 = temp;  //上述为头插的基本操作,需要熟练掌握
        }
        else {
            temp = p2->pNext;
            p2->pNext = L1->pNext;
            L1->pNext = p2;
            p2 = temp;
        }
    }
    if (p1) {
        p2 = p1;
    }
    while (p2) {
        temp = p2->pNext;
        p2->pNext = L1->pNext;
        L1->pNext = p2;
        p2 = temp;
    }
    free(L2);
}
  1. 设A和B是两个单链表(带头结点),其中元素递增有序,设计一个算法从A和B公共元素中产生单链表C,要求不破坏A,B的结点。
    注意要设置变量temp,始终指向新链表的尾部。貌似没啥难度吧。
linkList commonNodeList(linkList L1, linkList L2) {
    linkList p1 = L1->pNext, p2 = L2->pNext;
    linkList c = (linkList)malloc(sizeof(Node));
    linkList temp = c, t;
    while (p1 && p2) {
        if ( p1->data < p2->data ) {
            p1 = p1->pNext;
        }
        else if (p2->data < p1->data) {
            p2 = p2->pNext;
        }
        else {
            t = (linkList)malloc(sizeof(Node));
            t->data = p1->data;
            temp->pNext = t;
            temp = temp->pNext;
            p1 = p1->pNext;
            p2 = p2->pNext;
        }
    }
    temp->pNext = nullptr;
    return c;
}
  1. 已知两个链表A和B分别表示两个集合,元素递增排列,编制函数,求A和B的交集,并存放于A链表中。(这一题和上一题的主要区别是,本题结果保留在原来的链表上,链表的其余部分需要进行释放。)
void intersection(linkList &L1, linkList &L2) {
    linkList p1 = L1->pNext, p2 = L2->pNext, temp = L1;
    while (p1 && p2) {
        if (p1->data == p2->data) {
            temp->pNext = p1;
            temp = temp->pNext;
            linkList tNode = p2;
            p1 = p1->pNext;
            p2 = p2->pNext;
            free(tNode);//将不用的L2上的结点释放
        }
        else if (p1->data < p2->data) {
            linkList tNode = p1;
            p1 = p1->pNext;
            free(tNode);
        }
        else {
            linkList tNode = p2;
            p2 = p2->pNext;
            free(tNode);
        }
    }
    while (p1) {
        linkList tNode = p1;
        p1 = p1->pNext;
        free(tNode);
    }
    while (p2) {
        linkList tNode = p2;
        p2 = p2->pNext;
        free(tNode);
    }
    temp->pNext = nullptr;
    free(L2);
}
  1. 两个整数序列,A和B,已经存入两个单链表中,设计算法判断B是否是A的连续子序列。
bool isSubsquence(linkList l1, linkList l2) {
    linkList p1 = l1->pNext, p2 = l2->pNext;
    while (p1 && p2) {
        if (p1->data == p2->data) {
            p1 = p1->pNext;
            p2 = p2->pNext;
        }
        else {
            p1 = p1->pNext;
            p2 = l2->pNext;
        }
    }
    if (p2 == nullptr) return 1;
    else return 0;
}

后面琐碎待补。

相关文章

  • 王道数据结构 第二章 线性表(3) 编程题下半部分

    假设有两个元素值按递增次序排列的线性表,均以单链表形式存储,编写算法将这两个单链表归并为一个按元素值递减次序排列的...

  • 数据结构与算法---数组

    数组是一种最基础的数据结构,在大部分编程语言中,数组都是从0开始编号的。 线性表与非线性表 线性表(Linear ...

  • 王道数据结构 第二章 线性表(3) 编程题上半部分

    设计一个递归算法,删除不带头结点的单链表L中的所有值为x的结点。 在带头结点的单链表L中,删除所有值为x的结点,并...

  • 03 动态数组-01

    01-线性表 什么是数据结构? 数据结构是计算机存储、组织数据的方式 线性表 02-接口设计 在许多编程语言中,数...

  • 纸质计算机书

    1 Java Web编程实战宝典 2王道考研系列操作系统计算机组成原理数据结构计算机网络 3Java编程思想 4设...

  • 关于数据结构的一点唠叨

    现在大部分高级编程语言的标准库都会提供几种常用的数据结构,诸如线性表、链表、栈、队列、哈希表等等,可以满足日常开发...

  • 王道数据结构 第二章 线性表

    线性表的定义和基本操作 线性表的定义 线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列。其中n为表长,...

  • 07.数据结构:线性表入门

    大家好,我是王有志。 从今天开始就进入到数据结构的部分了,整体分为3个部分:线性表,树和图,从认识每种数据结构到它...

  • 王道数据结构 第二章 线性表(2)

    线性表的链式表示 顺序表达插入删除操作需要移动大量元素,影响了运行效率,故而引出了线性表的链式存储。在使用链式存储...

  • 数据结构(类C)

    第二章:线性表 一、线性表的基本运算在顺序表上的实现 1、插入 ★★★ 2、删除 ★ 3、定位 ★ 3、单链表的类...

网友评论

    本文标题:王道数据结构 第二章 线性表(3) 编程题下半部分

    本文链接:https://www.haomeiwen.com/subject/vdtftftx.html