线性表是最常见和常用的ADT。假设线性表的元素为整数,请基于顺序存储结构实现线性表ADT。
基本功能包括:
(1)建立线性表;
输入有两行,第一行是一个整数n,线性表的长度; 第二行是n和数据元素
(2)插入:
输入两个整数,即元素插入的位置和元素值
(3)删除:
输入一个整数,即要删除的元素
(4)搜索:
输入一个整数,即搜索元素的值
(5)输出:
输出线性表的各个元素,空格分开。
(6)集合的并运算:
输入创建第二个集合(线性表),完成并运算
(7)集合的交运算:
输入创建第二个集合(线性表),完成交运算
(8)合并两个有序线性表:
两个有序线性表,合并后仍然有序
测试数据:
5 //线性表A的长度
1 3 5 7 9 //线性表A的数据
2 10 //表示在第2个位置插入10
10 //表示删除值=10的数据元素
9 //查找元素9
22 / /查找元素22
6 //线性表B的长度
1 2 3 4 5 6
例如:
输入 :
5
1 3 5 7 9
2 10
10
9
22
6
1 2 3 4 5 6
输出:
A is created as: 1 3 5 7 9
After inserted A is 1 10 3 5 7 9
After deleted A is 1 3 5 7 9
9 is located at index of 5
22 is not found
B is created as: 1 2 3 4 5 6
A cross B is 1 3 5
A union B is 1 3 5 7 9 2 4 6
A union B in sequence is 1 2 3 4 5 6 7 9
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
template<class T>
struct node
{
T x;
node<T>* nex,*pre;
node()
{
nex=NULL;
pre=NULL;
}
node(T a)
{
x=a;
pre=nex=NULL;
}
};
template<class T>
class Link
{
public:
node<T> *e,*head,*last;
int siz;
Link();
Link(const Link& L);
~Link();
void push_back(T val);
void build(int n,T a[]);
void Insert(int pos,T x);
void del(T x);
int Search(T x);
void print();
void deleteAll();
void Sort();
};
template <class T>
Link<T>::Link()
{
head = new node<T>;
last = new node<T>;
head->nex = last;
head->pre = NULL;
last->nex = NULL;
last->pre = head;
siz = 0;
}
template <class T>
Link<T>::Link(const Link &L)
{
head = new node<T>;
head->pre = NULL;
last = new node<T