1. 程式人生 > >單鏈表和順序表

單鏈表和順序表

關於單鏈表集合的交集 #include

using namespace std; const int MaxSize=100; template struct Node { DataType data; Node *next; }; template class LinkList { public: LinkList(){first=new Node; first->next=NULL;}; LinkList (DataType a[],int n); ~LinkList(); int Length (); DataType Get (int i); int Locate (DataType x); void Insert (int i, DataType x); DataType Delete(int i); void PrintList(); private: Node*first; };

template void LinkList::PrintList() { Node*p; p=first->next; while(p!=NULL) { cout<data<<" "; p=p->next; } cout<<endl; } template int LinkList::Length() { Node*p; p=first->next; int count=0; while(p!=NULL) { p=p->next; count++; } return count; } template DataType LinkList::Get (int i) { Node*p; p=first->next; int count=1; while(p!=NULL&&count<i) { p=p->next; count++;

} if(pNULL)throw"位置"; else return p->data; } template int LinkList::Locate(DataType x) { Node*p; p=first->next;int count=1; while(p!=NULL) { if(p->datax)return count; p=p->next; count++; } return 0; }

template void LinkList::Insert (int i,DataType x)

{ Node*p; p=first;int count=0; while(p!=NULL&&count<i-1) { p=p->next; count++; } if(p==NULL)throw"位置"; else{ Node*s=new Node; s->data=x; s->next=p->next;p->next=s; } }

template LinkList::LinkList(DataType a[],int n) { first=new Node; first->next=NULL; for(int i=0;i<n;i++) { Node*s=new Node; s->data=a[i]; s->next=first->next;first->next=s;

}

}

template DataType LinkList::Delete(int i) { Node*p; int x; p=first; int count=0; Node*q; while(p!=NULL&&count<i-1) { p=p->next; count++; } if(pNULL||p->nextNULL) throw"位置"; else{ q=p->next;p->next=q->next; x=q->data; delete q; return x; } }

template LinkList::~LinkList() { Node*q; while(first!=NULL) { q=first; first=first->next; delete q; } } template void jiaoji(LinkList &A,LinkList&B,LinkList&C) { int i; //int m=0; for(i=1;i<=A.Length();i++) { DataType x=A.Get(i); // cout<<x<<" “<<B.Locate(x); if(B.Locate(x)!=0)C.Insert(1,x); } } int main() { cout<<“集合中的元素”<<endl; int arr[9] = {1,3,4,2,5,6,8,7,9}; int a[5]={1,2,3,4,5}; int b[10]={1,2,3,4,5,6,7,8,9,10}; LinkListL(arr,9); cout << “單鏈表為” << endl; L.PrintList(); cout << “單鏈表的長度為:” << L.Length() << endl; cout << “第一個位置的元素是:” << L.Get(1) << endl; cout << “元素1的位置是:” << L.Locate(1) << endl; cout << “在第3個位置插入元素22” << endl; L.Insert(1,22); cout << “單鏈表為” << endl; L.PrintList(); cout << “單鏈表的長度為:” << L.Length() << endl; cout << “刪除第3個位置的元素” << endl; L.Delete(3);cout << “單鏈表為” << endl; L.PrintList(); cout << “單鏈表的長度為” <<L.Length() << endl; LinkList A(a,5);A.PrintList(); LinkList B(b,10);B.PrintList(); LinkList C; jiaoji(A,B,C);C.PrintList(); cout<<“交集是”<<” ";C.PrintList(); return 0; } 關於順序表集合的並集 #include

using namespace std; const int MaxSize=100; template class SeqList { public: SeqList (){length=0;} SeqList (DataType a[],int n); ~SeqList(){}; int Length () {return length;} DataType Get (int i); int Locate (DataType x); void Insert (int i, DataType x); DataType Delete(int i); void PrintList(); private: DataType data[MaxSize]; int length; }; template SeqList::SeqList(DataType a[],int n) { if (n> MaxSize)throw “引數非法”; int i; for(i=0;i<n;i++) data[i]=a[i]; length=n; } template DataType SeqList::Get (int i) { if(i<1 && i> length) throw “查詢位置非法”; else return data[i-1] ; } template int SeqList::Locate(DataType x)

{ for (int i=0;i<length;i++) if(data[i]==x) return i+1; return 0;} template void SeqList::Insert (int i,DataType x) { int j; if (length>= MaxSize) throw “上溢”; if(i<1||i> length+1)throw"位置"; for (j=length;j>=i;j–) data[j]=data[j-1]; data[i-1]=x; length++; } template DataType SeqList::Delete (int i) {

int j;DataType x; if (length==0)throw “下溢”; if (i<1||i>length)throw “位置”; x=data[i-1];//55555 for(j=i;j<length;j++) data[j-1]=data[j]; length-- ; return x; } template void SeqList< DataType>::PrintList () {

for (int i=0; i<length;i++ ) cout<<data[i]<<" "; cout<<endl; }

template void bingji(SeqList &A,SeqList &B,SeqList &C) { int i,j; for(i=0;i<A.Length();i++) C.Insert(i+1,A.Get(i+1)); for(j=1;j<=B.Length();j++) {DataType x=B.Get(j); if(A.Locate(x)==0) C.Insert(i+1,x); } } int main() { cout<<“集合中的元素”<<endl; int array[9] = {1,3,4,2,5,6,8,7,9};int a[5]={1,2,3,4,5};int b[10]={1,2,3,4,5,6,7,8,9,10}; SeqList seqList(array, 9); SeqList A(a, 5); SeqList B(b, 10); SeqList C; bingji(A,B,C); cout << “順序表為” << endl; seqList.PrintList();

cout << “順序表的長度為:” << seqList.Length() << endl; cout << “第一個位置的元素是:” << seqList.Get(1) << endl; cout << “元素1的位置是:” << seqList.Locate(1) << endl; cout << “在第3個位置插入元素22” << endl; seqList.Insert(3,22); cout << “順序表為” << endl; seqList.PrintList(); cout << “順序表的長度為:” << seqList.Length() << endl; cout << “刪除第3個位置的元素” << endl; seqList.Delete(3);cout << “順序表為” << endl; seqList.PrintList(); cout << “順序表的長度為” << seqList.Length() << endl; cout<<“並集是”<<" "; C.PrintList(); return 0; }