链表的基本操作

来源:互联网 发布:西川贵教 知乎 编辑:程序博客网 时间:2024/06/06 08:35
#include<iostream>#include<stdio.h>#include<iomanip>#include<string.h>#include<string>#include<algorithm>#include<cmath>#include<map>#include<queue>#include<stack>using namespace std;template <typename t>struct lb{t data;lb<t> *next;};template <typename t>class lbl{public:lb<t> *head;public :lbl<t>();~lbl<t>();void creatf(t a[],int n);void creatr(t a[],int n);void display();int len();bool getl(int i,t &e);int locate(t e);bool insert(int i,t e);bool delete1(int i);};template <typename t>lbl<t>::lbl(){head=new lb<t>();head->next=NULL;}template <typename t>lbl<t>::~lbl(){lb<t> *pre,*p;pre=head;p=pre->next;while(p!=NULL){delete pre;pre=p;p=p->next;}delete pre;}template <typename t>void lbl<t>::creatf(t a[],int n){lb<t> *s;int i;head->next=NULL;for(i=0;i<n;i++){s=new lb<t>();s->data=a[i];s->next=head->next;head->next=s;}}template <typename t>void lbl<t>::creatr(t a[],int n){lb<t> *s,*r;int i;r=head;for(i=0;i<n;i++){s=new lb<t>();s->data=a[i];r->next=s;r=s;}}template <typename t>void lbl<t>::display(){lb<t> *p;p=head->next;int q=0;while(p!=NULL){if(q++)cout<<" ";cout<<p->data;p=p->next;}cout<<endl;}template <typename t>int lbl<t>::len(){lb<t> *p;p=head->next;int s=0;while(p!=NULL){s++;p=p->next;}return s;}template <typename t>bool lbl<t>::getl(int i ,t &e){int l=0;lb<t> *p;p=head;while(l<i&&p!=NULL){l++;p=p->next;}if(p==NULL)return 0;else {e=p->data;return 1;}}template <typename t>int lbl<t>::locate(t e){lb<t> *p;p=head;int i=0;while(p!=NULL&&p->data!=e){p=p->next;i++;}if(p==NULL)return 0;else return i;}template <typename t>bool lbl<t>::insert(int i,t e){int j=0;lb<t> *s,*p;if(i<1)return 0;p=head;while(j<i-1&&p!=NULL){j++;p=p->next;}if(p==NULL)return 0;else {s=new lb<t>();s->data=e;s->next=p->next;p->next=s;return 1;}}template <typename t>bool lbl<t>::delete1(int i){int j=0;lb<t> *s,*p;p=head;if(i<1)return 0;while(j<i-1&&p!=NULL){j++;p=p->next;}if(p==NULL)return 0;else {   s=p->next;   if(s==NULL)return 0;   p->next=s->next;   delete s;   return 1;}}template <typename t>void f(lbl<t> &x1,lbl<t> &x2,lbl<t> &x3){lb<t> *s1,*s2,*s3;s1=x1.head->next;s2=x2.head->next;s3=x3.head;x1.head->next=NULL;x2.head->next=NULL;while(s1!=NULL&&s2!=NULL){if(s1->data<s2->data){s3->next=s1;s3=s1;s1=s1->next;}else {s3->next=s2;s3=s2;s2=s2->next;}}while(s1!=NULL){s3->next=s1;s3=s1;s1=s1->next;}while(s2!=NULL){s3->next=s2;s3=s2;s2=s2->next;}s3->next=NULL;}int main(){int n;while(cin>>n){int a[1111];lbl <int>lbl1;for(int i=0;i<n;i++)cin>>a[i];lbl1.creatf(a,n);lbl1.display();lbl1.creatr(a,n);lbl1.display();int e;if(lbl1.getl(5,e))cout<<e<<endl;else cout<<"meiyouo"<<endl;cin>>e;if(lbl1.insert(5,e))lbl1.display();else cout<<"meiyouo"<<endl;e=lbl1.locate(12);if(e==0)cout<<"meiyouo"<<endl;else cout<<e<<endl;e=lbl1.len();cout<<e<<endl;if(lbl1.delete1(5))lbl1.display();else cout<<"meiyouo"<<endl;lbl<int> lbl2;int m;cin>>m;for(int i=0;i<m;i++)cin>>a[i];lbl2.creatr(a,m);lbl<int> lbl3;f(lbl1,lbl2,lbl3);lbl3.display();}return 0;}