线性表

2023-02-27 15:05:54 浏览数 (1)

2.设计一个程序,生成两个按值非递减有序排列的线性表LA和LB,再将LA和LB归并为一个新的线性表LC,且LC中的数据仍按值非递减有序排列,输出线性表LA、LB、LC。

代码语言:javascript复制
#include
using namespace std;
struct node
{
    int data;
    node *next;
};
class linklist
{
private:
    int length_a;
    node *first;

public:
    
    linklist(){
        first=new node;
        first->next=NULL;
    }
    linklist(int a[],int len_a);
    void display();//输出函数
    void appendd(int num);//在单链表尾部添加数据
    ~linklist(){}
    friend linklist through(linklist &a,linklist &b);//友元函数,访问两个类,并且将加得的单链表,作为一个类返回;



};
linklist::linklist(int a[],int len_a)
{
    first=new node;
    node *p=first;
    for(int i=0;idata=a[i];
        p->next=s;
        p=s;
    }
    p->next=NULL;

}
void linklist::appendd(int num){
    node *p=first;
    while(p->next!=NULL)
    {
        p=p->next;
    }
    node *s=new node;
    s->data=num;
    p->next=s;
    p=s;
    p->next=NULL;
    
}

linklist through(linklist &a,linklist &b)
{   
    linklist m;
    node *p1=a.first->next;
    node *p2=b.first->next;
    while(p1!=NULL || p2!=NULL)
    {
        if(p1!=NULL && p2!=NULL)
        {   
            if((p1->data)<=(p2->data))
            {
                m.appendd(p1->data);
                m.appendd(p2->data);
            }
            else
            {
                m.appendd(p2->data);
                m.appendd(p1->data);
            }
            p1=p1->next;
            p2=p2->next;

        }
        else if(p1==NULL && p2!=NULL)
        {   
            m.appendd(p2->data);
            p2=p2->next;
        }
        else
        {
            m.appendd(p1->data);
            p1=p1->next;
        }
        
    }
    return m;
}
void linklist::display()
{
    node *p=first->next;
    while(p!=NULL)
    {
        cout<data<next;


    }
}

int main()
{
    int a[3]={1,3,5},b[5]={2,4,6,7,9};
    linklist link_a(a,3),link_b(b,5),link_c;
    link_c=through(link_a,link_b);
    link_c.display();
    system("pause");
}

代码还是有一点有问题的,只能按一对一的大小排序,要真正实现升序,需要对链表进行排序

0 人点赞