定长顺序表--查找子表操作

来源:互联网 发布:剖腹产算日子软件下载 编辑:程序博客网 时间:2024/06/05 10:56
题目描述
为定长顺序表FixedLenArray实现一个方法int findSubSeq(FixedLenArray& other, FixedLenArray& output),
该方法,在this指针所代表的定长顺序表对象中,查找是否存在一个有序子表X,该子表中的元素全部依次对应other表中的所有元素.

若存在,返回OK,同时output参数中包含:X中每个元素在this表中的索引(從0开始),若不存在,则返回ERROR。

输入
输入包括偶数个行,具体行数不确定。每两行为一个查找单位,其中第一行为this表,第二行为other表
输出
输出索引表,或ERROR
样例输入
8 11 33 44 66 88 99 22 77
3 33 66 99
9 11 22 55 77 33 22 99 66 44
4 11 33 99 44
7 99 77 88 66 22 33 44
2 88 55
样例输出
3 1 3 5
4 0 4 6 8
ERROR
提示

输入的具体行数是不确定的。


#include<iostream>#include<cstring>using namespace std;class SeqList{private:int *list;int maxsize;int size;public:SeqList(int n, int *p);~SeqList();int findSubSeq(SeqList &a,SeqList &b);};SeqList::SeqList(int n, int *p){int i;maxsize = 1000;size = n;list = new int[maxsize];for (i = 0; i <= n; i++){list[i] = p[i];}}SeqList::~SeqList() {delete[]list;}int SeqList::findSubSeq(SeqList &a,SeqList &b){for(int i=0;i<a.size;i++){int flag1=0;for(int j=0;j<size;j++){if(a.list[i]==list[j]){b.list[i]=j;flag1=1;}}if(flag1==0)return 0;}cout<<a.size;for(int k=0;k<b.size;k++)cout<<" "<<b.list[k];cout<<endl;return 1;}int main(){int n, m, *p, *t, i;while(cin >> n){p = new int[n];for (i = 0; i<n; i++){cin >> p[i];}SeqList one(n, p);cin >> m;t = new int[m];for (i = 0; i<m; i++){cin >> t[i];}SeqList tow(m, t);SeqList three(m,t);int flag=one.findSubSeq(tow,three);if(flag==0)cout<<"error"<<endl;}return 0;}


0 0
原创粉丝点击