双向链表实验
实验目的
\(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\)