【C++】【数据结构复习】双向循环链表增删改查

在i位置插入元素

typedef int ElemType;

// 定义双向循环链表节点结构体
struct DcLnode 
{
    ElemType data;
    DcLnode *prior, *next;
}* DcLinkList; // 定义双向循环链表头指针类型别名

// 初始化
void InitList(DcLinkList &L) 
{
    L = new DcLnode;
    L->prior = L;
    L->next = L;
}

// 在双向循环链表的指定位置插入元素
void InsertList(DcLinkList &L, const ElemType &e, const int &i) 
{
    DcLnode *p = new DcLnode;
    p->data = e;

    DcLnode *c = L; //定义一个指向头结点的指针c
    for (int j = 0; j < i && c->next != L) //确保链表不为空
    {
        c = c->next;
        ++j;
    }

    if (i < 0 || c->next==L) {
        cerr << "out of range" 
    }

    p->next = c->next;
    p->prior = c;
    c->next->prior = p;
    c->next = p;

   
}

查找某个元素e

int FindList(DcLinkList&L,ElemType&e)
{
     DcLnode*p=L->next;
     int c=1;
     while(p)
     {
        if(p->data==e)
        {
           return c;
        }
        ++c;
        p=p->next;
      }
      cerr>>"not found";
}  

查找i位置的元素

bool LocatList(DcLinkList &L,ELemType &e,int &i)
{
Lcnode*p=L->next;
int j=1;
while(p!=L&&j<i)
{
  ++j;
  p=p->next;
}

if(i<0||p==L)
  {
    cerr>>"out of range";
    return false;

  }
e=p->data;
return true;

}

删除某个元素

void DeleteList(DcLinkList &L,int &i)
{
    Lcnode*p=L;
    int j=0;
    if(i<0)
    {
      cerr>>"out of range";
    }
    while(p!=L&&j<i-1)
    {
        ++j;
        p=p->next;
     }
    if(p==L)
     {
       cerr>>"out of range";
     }
     Lcnode*q=p->next;
     p->next=q->next;
     delete q;
}
     

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值