/ WHOJ / 题库 /

双向链表实验

双向链表实验

实验目的

\(1.\) 掌握线性表的双向链表存储结构;

\(2.\) 熟练掌握双向链表基本算法的实现;

\(3.\) 掌握利用双向链表数据结构解决实际问题的方法和基本技巧;

\(4.\) 按照实验题目要求独立正确地完成实验内容

实验内容

要求:数据元素类型 \(LNode\) 中有学号 \(int\)、姓名 \(char\)、成绩 \(float\) 三个成员变量保存一个学生的简单信息,及 \(prior\)、\(next\) 前后向指针。双向链表实现如下算法:

创建一空的双向链表: int InitList_L(LinkList &L)

测双向链表长度: int ListLength_L(LinkList L)

销毁某双向链表: void DestroyList_L(LinkList &L)

返回某双向链表第 \(pos\) 个元素的地址: LinkList ListGetElem(LinkList L, int pos)

顺序输出某双向链表。一行输出一位同学的学号、姓名、成绩,中间用空格隔开: void PrintList_L(LinkList L)

在某双向链表中 \(t\) 指向的元素之后插入元素: int ListInsert_L(LinkList t, LNode e)

构造一带数据的双向链表: int CreateList_L(LinkList &L)

在某双向链表中删除第 \(pos\) 个元素: int ListDelete_L(LinkList p)

元素关系学号等于判定函数 \(cmp\): int CmpNum(LinkList pa, LinkList pb)

在双向链表中利用 \(cmp\) 查找第一个满足条件的元素,并返回其序号: LinkList LocateElem_L(LinkList L, LNode e, int (×cmp)(LinkList,LinkList))

元素关系成绩小于判定函数 \(cmp\): int cmp(LinkList pa, LinkList pb)

实现有序合并双向链表: int Merg_L(LinkList La, LinkList Lb, LinkList &Lc)

题目描述

题目以命令形式运行(每行数据中各数据都有空格隔开):

\(1\) 表示输出某链表,\(1\) 后面跟有链表 \(La\)、\(Lb\)、\(Lc\) 的编号 \(1\)、\(2\)、\(3\) 其中之一;

\(2\) 表示创建空链表 \(La\)(如果已有 \(La\) 先销毁);

\(3\) 表示插入已有元素 \(e\) 至 \(La\),\(3\) 后面跟有插入点序号 \(pos\) 及该学生的学号、姓名、成绩,序号错误不插入;

\(4\) 表示构造带数据的链表 \(Lb\)(如果已有 \(Lb\) 先销毁),\(4\) 后面跟有元素个数 \(n\),以下 \(n\) 行每行代表一位同学信息的学号、姓名、成绩;

\(5\) 表示删除链表 \(La\) 中第 \(pos\) 个元素,\(5\) 后面跟有待删除元素序号,序号错误不删除;

\(6\) 表示删除链表 \(La\) 中学号等于给定学生 \(e\) 学号的元素,\(6\) 后面跟有给定学生 \(e\) 基本信息学号(姓名和成绩判定时不需要可以为任意值),没有该元素不删除;

\(7\) 表示将两个链表 \(La\)、\(Lb\) 按成绩(无重复)有序合并至链表 \(Lc\)。

格式

输入格式

第一行 \(N\) 表示以下命令个数;以下为如描述中叙述的命令。

输出格式

按照命令顺序输出命令 \(1\) 的内容。

样例1

输入样例1

11
2
3 1 1 a 99
3 1 2 s 98
3 1 4 d 89
5 1
6 2
4 2
7 e 59
3 g 100
7
1 1
1 2
1 3

输出样例1

1 a 99
7 e 59
3 g 100
3 g 100
1 a 99
7 e 59

限制

时间:\(1s\) 空间:\(128M\)

命令少于 \(1000\) 次

来源

地址:\(zloj,J2021\) 域
作者:\(jialiang2509\)