数据结构-实验二

单链表的操作

实验内容:

  1. 编程实现单链表的基本操作:建立单链表,查找单链表,插入单链表,删除单链表;
  2. 采用单链表结构编程实现:两个有序单链表的归并运算
    #include <iostream>
    #include <cstdlib>
    #define  ElemType int
    #define  OK 1
    #define  ERROR 0
    #define Status int
    using namespace std;
    typedef struct LNode
    {
        ElemType data;
        struct LNode *next;
    } LNode,*LinkList;
    void CreatList_H(LinkList &L,int n)
    {
        LinkList p;
        L=new LNode;
        L->next=NULL;
        int i;
        for(i=0; i<n; ++i)
        {
            p=new LNode;
            cin>>p->data;
            p->next=L->next;
            L->next=p;
        }
    }
    void print(LinkList L)
    {
        LinkList p;
        p=L->next;
        do{
            cout<<p->data<<" ";
            p=p->next;
        }while(p!=NULL);
        cout<<endl;
    }
    Status InitList(LinkList &L)
    {
        L=new LNode;
        L->next=NULL;
        return OK;
    }
    Status GetElem(LinkList L,int i,ElemType &e)
    {
        LinkList p;
        p=L->next;
        int j;
        j=1;
        while(p&&j<i)
        {
            p=p->next;
            ++j;
        }
        if(!p||j>i)return ERROR;
        e=p->data;
        cout<<e<<endl;
        return OK;
    }
    LNode *LocateElem(LinkList L,ElemType e)
    {
        LinkList p;
        p=L->next;
        while(p&&p->data!=e)
            p=p->next;
            cout<<p<<endl;
        return p;
    }
    Status ListInsert(LinkList &L,int i,ElemType e)
    {
        LinkList p;
        LinkList s;
        p=L;
        int j;
        j=0;
        while(p&&(j<i-1))
        {
            p=p->next;
            ++j;
        }
        if(!p||j>i-1)return ERROR;
        s=new LNode;
        s->data=e;
        s->next=p->next;
        p->next=s;
        return OK;
    }
    Status ListDelete(LinkList &L,int i)
    {
        LinkList p;
        LinkList q;
        p=L;
        int j;
        j=0;
        while((p->next)&&(j<i-1))
        {
            p=p->next;
            ++j;
        }
        if(!(p->next)||(j>i-1)) return ERROR;
        q=p->next;
        p->next=q->next;
        delete q;
        return OK;
    }
    
    void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC)
    {
        LinkList pa,pb,pc;
        pa=LA->next;
        pb=LB->next;
        LC=LA;
        pc=LC;
        while(pa&&pb)
        {
            if(pa->data<=pb->data)
            {
                pc->next=pa;
                pc=pa;
                pa=pa->next;
            }
            else
            {
                pc->next=pb;
                pc=pb;
                pb=pb->next;
            }
        }
        pc->next=pa?pa:pb;
        delete LB;
    }
    int main()
    {
        LinkList L;
        LinkList LA,LB,LC;
        int n,i;
        cout<<"请输入一个数n来表示单链表的长度"<<endl;
        cin>>n;
        cout<<"输入n个数。前插法插入到单链表中"<<endl;
        CreatList_H(L,n);
        cout<<"显示出输入数据的单链表"<<endl;
        print(L);
        int c;
        cout<<"请输入一个数表示要查找的数字"<<endl;
        cin>>c;
        cout<<"输出查找元素的地址"<<endl;
        *LocateElem(L,c);
        int d,f;
        cout<<"请输入两个数,d表示要插入的元素位置,f表示要插入的元素数值"<<endl;
        cin>>d>>f;
        ListInsert(L,d,f);
        cout<<"显示出插入元素后的单链表"<<endl;
        print(L);
        int g;
        cout<<"请输入一个数表示要删除的元素位置"<<endl;
        cin>>g;
        ListDelete(L,g);
        cout<<"显示出删除后的单链表"<<endl;
        print(L);
         cout<<"请输入一个数n来表示单链表的长度"<<endl;
        cin>>n;
        cout<<"输入n个数。前插法插入到单链表中"<<endl;
        CreatList_H(LA,n);
         cout<<"请输入一个数n来表示单链表的长度"<<endl;
        cin>>n;
        cout<<"输入n个数。前插法插入到单链表中"<<endl;
        CreatList_H(LB,n);
        MergeList_L(LA,LB,LC);
        cout<<"输出归并后的单链表"<<endl;
        print(LC);
        return 0;
    }
    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值