欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第二章 线性表

程序员文章站 2022-05-26 12:08:24
...

(5)设计算法将 一 个带头结点的单链表A 分解为两个具有相同结构的链表B 和C, 其中B
表的结点为 A 表中值小于零的结点,而 C 表的结点为 A 表中值大于零的结点(链表 A 中的元素
为非 零整数,要求 B 、 C 表利用 A 表的结点)。

/*
(5)设计算法将 一 个带头结点的单链表A 分解为两个具有相同结构的链表B 和C, 其中B
表的结点为 A 表中值小千零的结点,而 C 表的结点为 A 表中值大于零的结点(链表 A 中的元素
为非 零整数,要求 B 、 C 表利用 A 表的结点)。
*/

#include <stdio.h>
#include <iostream>

#define LENGTH 5

typedef struct LNode
{
    int data;
    struct LNode *next;
} LNode, *LinkList;

void CreatList_R(LinkList &L, int n)
{
    L = new LNode;
    L->next = NULL;
    LNode *r = L;
    for (int i = 0; i < n; i++)
    {
        LNode *p = new LNode;
        printf("请输入第%d个结点data值:", i + 1);
        std::cin >> p->data;
        p->next = NULL;
        r->next = p;
        r = p;
    }
}

void ShowList(LinkList L)
{
    LNode *p = L->next;
    while (p)
    {
        printf("%d\t", p->data);
        p = p->next;
    }
    printf("\n");
}

void InitList(LinkList &L)
{
    L = new LNode;
    L->next = NULL;
}

void AimList(LinkList &L1, LinkList &LA, LinkList &LB)
{
    LNode *aim = L1->next;
    LNode *Ar = LA;
    LNode *Br = LB;
    while (aim)
    {
        if (aim->data < 0)
        {
            Ar->next = aim;
            Ar = aim;
            aim = aim->next;
        }
        else
        {
            Br->next = aim;
            Br = aim;
            aim = aim->next;
        }
    }
    Ar->next = NULL;
    Br->next = NULL;
    delete L1;
}

int main(void)
{
    LinkList L1, LA, LB;
    InitList(LA);
    InitList(LB);
    CreatList_R(L1, LENGTH);
    printf("L1: ");
    ShowList(L1);
    AimList(L1, LA, LB);
    printf("LA: ");
    ShowList(LA);
    printf("LB: ");
    ShowList(LB);

    delete LA;
    delete LB;
    return 0;
}

运行结果:
第二章 线性表
如有错误,请告诉小茅芦。

相关标签: 数据结构