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

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

链表

 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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值