【数据结构】-链表与顺序表

    科技2023-10-01  72

    自己写的模板才是最好的模板 

    链表

     sort只需要变顺序啊

    new Linknode(val)才给他开了个空间,不然白给

    #include <iostream> #include<bits/stdc++.h> using namespace std; class List; class LinkNode { friend class List; private: int data; LinkNode *link; public: LinkNode(const int & item, LinkNode *ptr = NULL) { data=item; link=ptr; } LinkNode (LinkNode *ptr = NULL) { link=ptr; } ~LinkNode() { }; }; class List { private: LinkNode *first; public: List () { first = new LinkNode (); } ~List () { MakeEmpty(); //析构函数 } void MakeEmpty ( ); //链表置空 int Remove ( int i ); //需要补充的成员函数 void input(); void output(); //需要补充的成员函数 void Sort(); void Insert(int val); }; void List:: MakeEmpty ( ) { LinkNode *q; while (first->link != NULL ) { q = first->link; first->link = q->link; delete q; } } void List:: input( ) { int n,val; LinkNode *newnode; cin>>n; for(int i=1;i<=n;i++) { cin>>val; newnode=new LinkNode(val); newnode->data=val; newnode->link=first->link; first->link=newnode; } } void List::Sort() { LinkNode *i=first->link,*j; while (i!= NULL ) { j=i->link; while(j!=NULL) { if(i->data>j->data) { int temp; temp=j->data; j->data=i->data; i->data=temp; } j=j->link; } i=i->link; } } void List::output() { LinkNode *q; while (first->link != NULL ) { q = first->link; first->link = q->link; cout<<q->data<<endl; } } void List::Insert(int val) { LinkNode *q=first->link; int f=1; while(q!=NULL) { if(q->data==val) { f=0; break; } q=q->link; } if(f) { q=new LinkNode(val); q->link=first->link; first->link=q; } } int main() { List L; L.input(); L.Sort(); //L.output(); int n; cin>>n; for(int i=1;i<=n;i++) { int val; cin>>val; L.Insert(val); } L.Sort(); L.output(); return 0; }

    顺序表

    #include <iostream> #include<bits/stdc++.h> using namespace std; class SeqList { private: int *data1; int *data2; int maxsize; int last1; int last2; public: SeqList(int sz); ~SeqList() { delete[] data1; delete[] data2; } void input1(int n); void output1(); void input2(int n); void output2(); void Insert(int pos,int val); void Delete(int val); void cross(); void Union(); void Sort(); int Findlocation(int val); }; SeqList::SeqList(int sz) { if(sz>0) { data1=new int[sz],last1=-1; data2=new int[sz],last2=-1; } } void SeqList::input1(int sz) { for(int i=1; i<=sz; i++) { cin>>data1[++last1]; } } void SeqList::input2(int sz) { for(int i=1; i<=sz; i++) { cin>>data2[++last2]; } } void SeqList::output1() { for(int i=0; i<=last1; i++) cout<<" "<<data1[i]; cout<<endl; } void SeqList::output2() { for(int i=0; i<=last2; i++) cout<<" "<<data2[i]; cout<<endl; } void SeqList::Insert(int pos,int val) { for(int i=last1; i>=(pos-1); i--) data1[i+1]=data1[i]; data1[pos-1]=val; last1++; } void SeqList::Delete(int val) { int cnt=0; for(int i=0; i<=last1; i++) { data1[i-cnt]=data1[i]; if(data1[i]==val) cnt++; } last1-=cnt; } int SeqList::Findlocation(int val) { for(int i=0; i<=last1; i++) { if(val==data1[i]) return i+1; } return -1; } void SeqList::cross() { for(int i=0;i<=last1;i++) { int f=0; for(int j=0;j<=last2;j++) { if(data1[i]==data2[j]) {f=1;break; } } if(f) cout<<" "<<data1[i]; } cout<<endl; } void SeqList::Union() { int cnt=0; for(int i=0;i<=last1;i++) cout<<" "<<data1[i]; for(int j=0;j<=last2;j++) { int f=1; for(int i=0;i<=last1;i++) { if(data1[i]==data2[j]) {f=0;continue;} } if(f) { cnt++; data1[last1+cnt]=data2[j]; cout<<" "<<data2[j]; } } last1+=cnt; cout<<endl; } void SeqList::Sort() { sort(data1,data1+last1+1); } int main() { SeqList lst(100); int n ; cin>>n; lst.input1(n); cout<<"A is created as:"; lst.output1(); int pos,val; cin>>pos>>val; lst.Insert(pos,val); cout<<"After inserted A is"; lst.output1(); int findnum; cin>>findnum; lst.Delete(findnum); cout<<"After deleted A is"; lst.output1(); cin>>val; int index=lst.Findlocation(val); if(index==-1) printf("%d is not found\n",val); else printf("%d is located at index of %d\n",val,index); cin>>val; index=lst.Findlocation(val); if(index==-1) printf("%d is not found\n",val); else printf("%d is located at index of %d\n",val,index); cin>>n; lst.input2(n); cout<<"B is created as:"; lst.output2(); cout<<"A cross B is"; lst.cross(); cout<<"A union B is"; lst.Union(); cout<<"A union B in sequence is"; lst.Sort(); lst.output1(); return 0; }

     

    Processed: 0.010, SQL: 8