双向循环链表代码实践

本文详细探讨了双向循环链表的数据结构,通过代码实践展示了如何创建、插入、删除节点,以及遍历链表。理解这种数据结构对于提升算法能力至关重要。
摘要由CSDN通过智能技术生成
 #include<iostream>
using namespace std;
struct id
{
    id *prev;
    int num;
    id*next;
};
id *tem = NULL;
void cre(id *guard)
{
    int insert;
    cout << "你想插在在第几个"<<endl;
    cin >> insert;
    if (guard->next == guard&&guard->prev == guard)
    {
        tem = new id;
        tem->num = insert;
        guard->next = tem;
        guard->prev = tem;
        tem->next = guard;
        tem->prev = guard;
        tem = NULL;
    }
    else
    {
        id*head = guard->next;
        for (;insert > head->num;head = head->next)
        {
            if (head== guard)
            {
                break;
            }
        }
        if (head == guard)
        {
            head = guard -> prev;
            tem = new id;
            tem->num = insert;
            tem->next = guard;
            tem->prev = head;
            tem->next->prev = tem;
            tem->prev->next = tem;
            tem = NULL;
        }
        else
        {
            tem = new id;
            tem->num = insert;
            tem->next = head;
            tem->prev = head->prev;
            tem->prev->next = tem;
            tem->next->prev = tem;
            tem = NULL;
        }
    }
}
void del(id *guard)
{
    cout << "你想删除序号是多少的那个块"<<endl;
    int del_;
    cin >> del_;
    id*head=guard->next;
    for (;del_ != head->num;head = head->next)
    {
        if (head== guard)
        {
            cout << "没有,别删了"<<endl;
            break;
        }
    }
    if (head != guard)
    {
        head->next->prev = head->prev;
        head->prev->next = head->next;
        delete head;
        cout << "删除成功"<<endl;
    }
}
void mod(id *guard)
{
    int modify;
    cout << "你想修改序号是多少的数"<<endl;
    cin >> modify;
    id*head;
    head = guard->next;
    for (;modify != head->num;head = head->next)
    {
        if (head == guard)
        {
            cout << "你改啥"<<endl;
            break;
        }
    }
    if (head != guard)
    {
        int scan;
        cout << "你想改成几" << endl;
        cin >> scan;
        head->num = scan;
        cout << "修改成功" << endl;
    }
}
void pri(id *guard)
{
    id*head=guard->next;
    for (;head != guard;head = head->next)
    {
        cout << head->num<<endl;
    }
}
int main()
{
    int n;
    id*guard = new id;
    guard->next = guard;
    guard->prev = guard;
    guard->num = NULL;
    while (cin.good())
    {
        cout << "1插入,2删除,3修改,4打印"<<endl;
        cin >> n;
        switch (n)
        {
        case 1:
            {
                cre(guard);
                break;
            }
        case 2:
            {
                del(guard);
                break;
            }
        case 3:
            {
                mod(guard);
                break;
            }
        case 4:
            {
                pri(guard);
                break;
            }               
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值