开多个链表操作

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<math.h>

#include<iostream>

#include<algorithm>

#include<stack>

#include<queue>

#include<vector>

#include<set>

#include<map>

#include<bitset>

#include<string>

#define nl n<<1

#define nr (n<<1)|1

#define fi first

#define se second

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pair<int,int>P;

const int INF=0x3f3f3f3f;

const ll INFF=0x3f3f3f3f3f3f3f3f;

const double pi=acos(-1.0);

const double eps=1e-9;

const ll mod=1e9+7;

int read()

{

    int x=0,f=1;char ch=getchar();

    while(ch<'0' | ch>'9') {if(ch=='-') f=-1;ch=getchar();}

    while(ch>='0' && ch<='9') {x=x*10+ch-'0';ch=getchar();}

    return x*f;

}

void Out(int aa)

{

    if(aa>9)

        Out(aa/10);

    putchar(aa%10+'0');

}

struct node

{

    node *next;

    node *pre;

    int v;

    node(){

        pre=NULL;

        next=NULL;

    }

};

struct Stack

{

    node *head;

    node *now;

    Stack()

    {

        head=NULL;

        now=NULL;

    }

    void Insert(int p)

    {

        if(head==NULL)

        {

            head=new node();

            now=head;

            head->v=p;

            head->pre=NULL;

        }

        else

        {

            now->next=new node();

            now->next->pre=now;

            now=now->next;

            now->v=p;

        }

    }

    void pop()

    {

        if(now==head)

        {

            now=NULL;

            head=NULL;

        }

        else

        {

            node *tmp=now;

            now=now->pre;

            delete tmp;

        }

    }

    void top()

    {

        if(now!=NULL)

        {

            printf("%d\n",now->v);

            pop();

        }

        else

            printf("EMPTY\n");

    }

    void contect(Stack &p)

    {

        if(p.head==NULL)

            return;

        if(this->head==NULL)

        {

            this->head=p.head;

            this->now=p.now;

            p.head=NULL;

            p.now=NULL;

        }

        else

        {

            this->now->next=p.head;

            p.head->pre=this->now;

            this->now=p.now;

            p.head=NULL;

            p.now=NULL;

        }

    }

};

Stack *a;

int main()

{

    int t=read();

    while(t--)

    {

        int n=read(),m=read();

        a=new Stack[n+4];

        for(int i=0;i<m;i++)

        {

            int op=read(),s=read(),v;

            if(op==1)

            {

                v=read();

                a[s].Insert(v);

            }

            else if(op==2)

            {

                a[s].top();

            }

            else

            {

                v=read();

                a[s].contect(a[v]);

            }

        }

    }

    return 0;

}

版权声明:本文为nucshiyilang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>