-->
当前位置:首页 > 题库 > 正文内容

函数题:将单链表按基准划分

Luz4年前 (2021-10-01)题库1824

### 线性表实验六 将单链表按基准划分
### 目的: 掌握单链表的应用和算法设计。
### 内容: 编写一个程序,以给定值x为基准将单链表分割为两部分,所有小于x的结点排在大于或等于x的结点之前。你应当 保留 两个分区中每个节点的初始相对位置。

示例:



单链表为:{1, 4, 3, 2, 5, 2}, x = 3

以3为基准划分后,单链表为:{1, 2, 2, 4, 3, 5}。

### 单链表结点类型定义:
c++
typedef char ElemType;

typedef struct LNode {
ElemType data;
struct LNode *next; //指向后继结点
} LinkNode; //单链表结点类型



### 函数接口定义:
下列各函数签名中,L为带头结点的单链表的头指针,如下图所示:




c++

/**
* 尾插法建立单链表:裁判实现
*/
void CreateListR(LinkNode *&L, ElemType a[], int n);

/**
* 输出线性表: 每个数据后面一个空格:裁判实现
*/
void DispList(LinkNode *L);

/**
* 将L中所有数据结点按x进行划分。
* 所有小于x的结点排在大于等于x的结点前面。
* 必须保证两个分区中每个节点的初始相对位置。
*/
void Split(LinkNode *&L, ElemType x);



### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;

typedef struct LNode {
ElemType data;
struct LNode *next; //指向后继结点
} LinkNode; //单链表结点类型

/**
* 尾插法建立单链表:裁判实现
*/
void CreateListR(LinkNode *&L, ElemType a[], int n);

/**
* 输出线性表: 每个数据后面一个空格:裁判实现
*/
void DispList(LinkNode *L);

/**
* 将L中所有数据结点按x进行划分。
* 所有小于x的结点排在大于等于x的结点前面。
* 必须保证两个分区中每个节点的初始相对位置。
*/
void Split(LinkNode *&L, ElemType x);

int main()
{
int n;
scanf("%d", &n);

ElemType a[n];
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}

LinkNode *L;
CreateListR(L, a, n);
printf("L:"); DispList(L);

ElemType x;
scanf("%d", &x);

printf("以%d进行划分\n", x);
Split(L, x);
printf("L:"); DispList(L);

return 0;
}

/* 请在下面书写程序代码 */



### 输入样例:
第一行输入n, 其值不超过200。

第二行输入n个整数, 以空格分隔, 其值介于[-100,100]。

第三行输入x, 其值介于[-200,200]。
in
6
1 4 3 2 5 2
3



### 输出样例:
参见下面的样例。
整体输出线性表时,每个数据后面一个空格。
out
L:1 4 3 2 5 2
以3进行划分
L:1 2 2 4 3 5








答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。