有序单链表的归并运算。

来源:互联网 发布:mysql 配置优化 编辑:程序博客网 时间:2024/06/11 21:51

采用单链表结构编程实现:两个有序单链表的归并运算。


#include <iostream>#define ERROR 0#define OK 1#include <stdlib.h>using namespace std;typedef int ElemType;typedef int Status;typedef struct LNode{    ElemType data;    struct LNode *next;} LNode,*LinkList;void CreatList(LinkList &L,int n){    LinkList p;    L=(LinkList)malloc(sizeof(LNode));    L->next=NULL;    for(int i=n; i>0; i--)    {        p=(LinkList)malloc(sizeof(LNode));        cin>>p->data;        p->next=L->next;        L->next=p;    }}Status GetElem_L(LinkList &L,int i,ElemType &e){    LinkList p;    p=L;    int j=0;    while(p&&j<i)    {        p=p->next;        j++;        if(j==i)            break;    }    if(!p||j>i)        return ERROR;    e=p->data;    return OK;}Status ListInsert_L(LinkList &L,int i,ElemType e){    LinkList p;    p=L;    int j=0;    while(p&&j<i-1)    {        p=p->next;        j++;    }    if(!p||j>i-1)        return ERROR;    LinkList s;    s=(LinkList)malloc(sizeof(LNode));    s->data=e;    s->next=p->next;    p->next=s;    return OK;}void getLinkList(LinkList &L){    LinkList p;    p=L;    while(p->next)    {        p=p->next;        cout<<p->data<<" ";    }    cout<<endl;}void MergeList(LinkList L1, LinkList L2,LinkList &L3){    LinkList p1,p2;    p1=L1->next;    p2=L2->next;    int i=1;    while(p1&&p2)    {        if(p1->data<p2->data)        {            ListInsert_L(L3,i,p1->data);            p1=p1->next;        }        else        {            ListInsert_L(L3,i,p2->data);            p2=p2->next;        }        i++;    }    while(p1)    {        ListInsert_L(L3,i,p1->data);        p1=p1->next;        i++;    }    while(p2)    {        ListInsert_L(L3,i,p2->data);        p2=p2->next;        i++;    }}int main(){    LinkList L1,L2;    cout<<"第一个有序链表长度:"<<endl;    int n1;    cin>>n1;    cout<<"逆序输入n个元素:"<<endl;    CreatList(L1,n1);    cout<<"第二个有序链表长度:"<<endl;    int n2;    cin>>n2;    cout<<"逆序输入n个元素:"<<endl;    CreatList(L2,n2);    LinkList L3;    L3=(LinkList)malloc(sizeof(LNode));    L3->next=NULL;    cout<<"归并后的有序列表:"<<endl;    MergeList(L1,L2,L3);    getLinkList(L3);    return 0;}


0 0
原创粉丝点击