c2.LinerList(DLinkList)

DLinkList

/*链式存储(双链表)*/
#include <cstdio>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef int Elemtype;

typedef struct DNode
{
    int ListLength;
    Elemtype data;
    DNode *prior;
    DNode *next;
}DNode,*DLinkList;

bool InitList(DLinkList &L)//初始化双链表
{
    L=new DNode;
    if(L==NULL){return false;}
    L->next=NULL;
    L->prior=NULL;
    return true;
}

bool GetElem(DLinkList L,int i,Elemtype &e)//双链表按节点取值
{
    DLinkList p=new DNode;
    p=L->next;
    int j=1;
    while(p&&j<i)//只到i-1位
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i){return false;}
    e=p->data;
    return true;
}
DNode *LocateElem(DLinkList L,Elemtype e)//双链表按值查找,返回该节点
{
    DNode *p=new DNode;
    p=L->next;
    while(p && p->data!=e)
    {
        p=p->next;
    }
    return p;

}
bool ListInsert(DLinkList &L,int i,Elemtype e)
{
    Elemtype t;
    if(!GetElem(L,i,t)){return false;}//if合法判断
    DLinkList pl=new DNode;
    pl=L;int j=0;
    while(j<i-1)//到i-1
    {
        pl=pl->next;
        j++;
    }
    DLinkList temp=new DNode;
    temp->data=e;
    temp->next=pl->next;
    temp->prior=pl;
    pl->next=temp;
    temp->next->prior=temp;
    L->ListLength++;
    return true;
}
bool ListDelete(DLinkList &L,int i)
{
    Elemtype t;
    if(!GetElem(L,i,t)){return false;}//if合法判断
    DLinkList p=new DNode;int j=0;
    p=L;
    while(j<i-1)
    {
        p=p->next;
        j++;
    }
    DLinkList temp=new DNode;
    temp=p->next;
    p->next=temp->next;
    temp->next->prior=p;
    L->ListLength--;
    return true;
}

void CreateList(DLinkList &L,int i)//正序输入创建双链表
{
    DLinkList r=new DNode;
    r=L;
    for(int j=0;j<i;j++)
    {
        DLinkList p =new DNode;
        cin >> p->data;
        p->next=NULL;p->prior=r;r->next=p;
        r=p;
    }
    L->ListLength=i;
}
void UnionList(DLinkList &LA,DLinkList &LB,DLinkList &LC)//双链表的连接
{
    LC=LA;
    DLinkList p=new DNode;
    p=LA->next;
    while(p->next!=NULL)
    {
        p=p->next;
    }
    p->next=LB->next;
    LB->next->prior=p;
    LC->ListLength=LA->ListLength+LB->ListLength;
}
void PrintList(DLinkList L)
{
    DLinkList p=L;
    while(p->next!=NULL)
    {
        p=p->next;
        cout << p->data << " ";
    }
    cout << endl;
}


int main()
{
    DLinkList t,t1,t2;
    InitList(t);InitList(t1);InitList(t2);
    CreateList(t,5);CreateList(t1,5);
    PrintList(t);PrintList(t1);
    UnionList(t,t1,t2);
    PrintList(t2);
    //Elemtype TEMP;
    //GetElem(t,3,TEMP);
    //cout<<"third:" <<TEMP << endl;
    //DNode *pl=LocateElem(t,4);
    //if(pl){cout <<pl->data<<endl;}
    //Elemtype insert_var=8;
    //ListInsert(t,3,insert_var);
    //PrintList(t);
    //ListDelete(t,3);
    //PrintList(t);

    return 0;


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值