笨蛋的数据结构模版

1. DS单链表 

class listnode
{
public:
    int data;
    listnode*next;
    listnode()
    {
        next=NULL;
    }
};

class linklist
{
public:
    listnode*head;
    int len;
    linklist()
    {
        head=new listnode();
        len=0;
    }
    ~linklist()
    {
        listnode*p,*q;
        p=head;
        while(p!=NULL)
        {
            q=p;
            p=p->next;
            delete q;
        }
        len=0;
        head=NULL;
    }
    void LL_display()
    {
        listnode*p;
        p=head->next;
        while(p)
        {
            cout<<p->data<<' ';
            p=p->next;
        }
        cout<<endl;
    }
    int LL_get(int i) //获取数据
    {
        if(i>len||i<1)
        {
            return 0;
        }
        listnode*p=head->next;
        for(int j=1;j<i;j++)
        {
            if(p!=NULL)
            {
                p=p->next;
            }
        }
        return p->data;
    }
    int LL_insert(int i,int item)  //插入
    {
        if(i>len+1||i<1)
        {
            return 0;
        }
        listnode*p=head;
        listnode*cur;
        listnode*now=new listnode();
        cur=head->next;
        for(int j=1;j<i;j++)
        {
           if(cur!=NULL)
           {
               p=cur;
               cur=cur->next;
           }
        }
        now->data=item;
        p->next=now;
        now->next=cur;
        len++;
        return 1;
    }
    int LL_del(int i)  //删除结点
    {
        if(i>len||i<1)
        {
            return 0;
        }
        listnode*p=head;
        listnode*cur=head->next;
        for(int j=1;j<i;j++)
        {
            if(cur!=NULL)
            {
                p=cur;
                cur=cur->next;
            }
        }
        p->next=cur->next;
        len--;
        return 1;
    }
    int myswap(int i1,int i2)  //交换结点
    {
        if(i1<1||i2<1||i1>len||i2>len)
        {
            return 0;
        }
        listnode*p=head;
        listnode*cur=head->next;
        listnode*cur2=head->next;
        listnode*now;
        listnode*q=head;
        for(int j=1;j<i1;j++)
        {
            if(cur!=NULL)
            {
                p=cur;
                cur=cur->next;
            }
        }
        for(int j=1;j<i2;j++)
        {
            if(cur2!=NULL)
            {
                q=cur2;
                cur2=cur2->next;
            }
        }
        now=cur2->next;
        cur2->next=cur->next;
        p->next=cur2;
        cur->next=now;
        q->next=cur;
        return 1;
    }
     int LL_merge(listnode *La,listnode*Lb)  //链表合并
     {
         listnode *Lc=new listnode;
         if(La==NULL||Lb==NULL)return 0;
         listnode*p=La->next;
         listnode*q=Lb->next;
         listnode*w=La;
         delete Lb;
         Lb=NULL;
         while(p&&q)
         {
             if(p->data<=q->data)
             {
                 w->next=p;
                 p=p->next;
                 w=w->next;
             }
             else
             {
                 w->next=q;
                 q=q->next;
                 w=w->next;
             }
        }
        w->next=p?p:q;
         return 1;
     }
};

2.DS顺序表

class linklist
{
public:
    int *data;
    int maxlen;
    int len;
    linklist(int n)
    {
        len=n;
        data=new int[n];
        for(int i=0;i<n;i++)
        {
            cin>>data[i];
        }
    }
    int LL_insert(int i,int item)
    {
        if(i<0||i>len)
        {
            return 0;
        }
        for(int j=len-1;j>=i;j--)
        {
            data[j+1]=data[j];
        }
        data[i]=item;
        len++;
        return 1;
    }
    int LL_search(int item)
    {
        for(int i=0;i<len;i++)
        {
            if(data[i]==item)
            {
                return i;
            }
        }
        return -1;
    }
    void display()
    {
        for(int i=0;i<len-1;i++)
        {
            cout<<data[i]<<" ";
        }
        cout<<data[len-1]<<endl;
    }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值