数据结构与算法实验4——链式描述线性表

1.实验内容

实验4.1

要求封装链表类,链表迭代器类;

链表类需提供操作:在指定位置插入元素,删除指定元素,搜索链表中是否有指定元素,原地逆置链表,输出链表;

不得使用与链表实现相关的STL。

输入输出格式:

输入:第一行两个整数 N 和 Q。

第二行 N 个整数,作为节点的元素值,创建链表。

接下来 Q 行,执行各个操作,具体格式如下:

插入操作 : 1 idx val,在链表的idx位置插入元素val;

删除操作 : 2 val,删除链表中的 val 元素。若链表中存在多个该元素,仅删除第一个。若该元素不存在,输出 -1;

逆置操作 : 3,原地逆置链表;

查询操作 : 4 val,查询链表中的val元素,并输出其索引。若链表中存在多个该元素,输出第一个的索引。若不存在该元素,输出 -1;

输出操作 : 5,使用链表迭代器,输出当前链表索引与元素的异或和。

实验4.2

要求使用题目一中实现的链表类,迭代器类完成本题;

不得使用与题目实现相关的STL;

给定两组整数序列,你需要分别创建两个有序链表,使用链表迭代器实现链表的合并,并分别输出这三个有序链表的索引与元素的异或和。

注:给定序列是无序的,你需要首先得到一个有序的链表。

输入输出格式:

输入:

第一行两个整数 N 和 M;

第二行 N 个整数,代表第一组整数序列;

第三行 M 个整数,代表第二组整数序列。

输出:

三行整数。分别代表第一组数、第二组数对应的有序链表与合并后有序链表的索引与元素的异或和。

2.测试结果

实验4.1

输入:

10 10

6863 35084 11427 53377 34937 14116 5000 49692 70281 73704

4 6863

1 2 44199

5

4 21466

1 6 11483

5

4 34937

5

4 6863

1 10 18635

输出:
0
398665

-1

410141

5

410141

0

实验4.2

输入:

3 2

3 1 2

8 7

输出:

5

16

21

3.源代码

实验4.1

#include<iostream>

using namespace std;

template<class T> //定义节点结构体

struct chainNode

{

T element;

chainNode<T> *next;

chainNode()

{}

chainNode(const T &element)

{

this->element=element;

}

chainNode(const T &element,chainNode<T>*next)

{

this->element=element;

this->next=next;

}

};

template<class T> //定义链表类

class chain

{

public:

chain() //构造函数

{

firstNode=NULL;

listSize=0;

}

chain(const chain<T>&theList) //复制构造函数

{

listSize=theList.listSize;

if(listSize==0)

{

firstNode=NULL;

return;

}

chainNode<T>*sourceNode=theList.firstNode;

firstNode=new chainNode<T>(sourceNode->element);

sourceNode=sourceNode->next;

chainNode<T>*targetNode=firstNode;

while(sourceNode!=NULL)

{

targetNode->next=new chainNode<T>(sourceNode->element);

target

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值