数据结构-链表的可视化编辑

可视化执行链表源码

代码仅供参考

头文件

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

创建节点

struct Node
{
    int data;
    Node* next;
};
typedef Node* List;

链表的初始化

void Initlist(List& list)
{
    list = new Node;
    list->data = 0;
    list->next = NULL;
}

前插

void Frontinsert(List& list, int a)//前插
{
    List l = new Node;
    if (!l)
        exit(0);
    l->data = a;
    l->next = list->next;
    list->next = l;
}

前插建立链表

void Frontbuild(List& list, int n)//前插建立
{
    int m;
    for (int i = 0; i < n; i++)
    {
        cout << "请输入要插入元素的第"<<i+1<<"位值:" << endl;
        cin >> m;
        Frontinsert(list, m);
    }
}

后插

void Rearinsert(List& list, int a)//后插
{
    List l = new Node;
    if (!l)
        exit(0);
    List p = list;
    while (p->next != NULL)
    {
        p = p->next;
    }
    l->data = a;
    l->next = NULL;
    p->next = l;
}

后插建立链表

void Rearbuild(List& list, int n)//后插建立
{
    int m;
    for (int i = 0; i < n; i++)
    {
        cout << "请输入要插入元素的第" << i + 1 << "位值:" << endl;
        cin >> m;
        Rearinsert(list, m);
    }
}

按值查找

void Checklink1(List& list, int a)//按值查找
{
    List p = list;
    int count = 0;
    while (p->next != NULL)
    {
        p = p->next;
        count++;
        if (p->data == a)
        {
            cout << "值为" << a << "的元素在第:" << count << "位" << endl;
        }
    }
    if (count == 1)
    {
        cout << "没有查找到对应值的元素" << endl;
    }
}

按位置查找

void Checklink2(List& list, int a)//按位置查找
{
    List p = list;
    for (int i = 0; i < a; i++)
    {
        p = p->next;
    }
    cout << "排在第" << a << "位的元素是:" << p->data << endl;
}

按值插入(前插)

void FrontInsertlink1(List& list, int a, int b)//前插按值插入(插入a到b值的前面)
{
    List p = list;
    List l = new Node;
    while (p->next != NULL)
    {
        p = p->next;
        if (p->next->data == b)
        {
            l->data = a;
            l->next = p->next;
            p->next = l;
            break;
        }
    }
}

按值插入(后插)

void RearInsertlink1(List& list, int a, int b)//后插按值插入(插入a到b值的后面)
{
    List p = list;
    List l = new Node;
    while (p->next != NULL)
    {
        p = p->next;
        if (p->data == b)
        {
            l->data = a;
            l->next = p->next;
            p->next = l;
            break;
        }
    }
}

按位置插入

void Insertlink2(List& list, int a, int b)//按位置插入(插入a值到b位置)
{
    List p = list;
    List l = new Node;
    for (int i = 0; i < b-1 ; i++)
    {
        p=p->next;
    }
    l->data = a;
    l->next = p->next;
    p->next = l;
}

按值删除

void Delete1(List& list, int a)//删除值为a的元素
{
    List p = list;
    while (p->next != NULL)
    {
        if (p->next->data == a)
        {
            p->next = p->next->next;
        }
    }
}

按位置删除

void Delete2(List& list, int a)//删除a位置的元素
{
    List p = list;
    for (int i = 0; i < a - 1; i++)
    {
        p->next = p->next->next;
    }
}

打印链表中元素

void Printlist(List& list)
{
    List p = list;
    cout << "链表中的元素为:";
    while (p->next != NULL)
    {
        p = p->next;
        cout << p->data << " ";
    }
    cout << endl;
}

主函数即菜单打印

int main()
{
    List list;
    Initlist(list);
    cout << "1.前插法建立" << endl;
    cout << "2.后插法建立" << endl;
    cout << "3.按值查找" << endl;
    cout << "4.按位置查找" << endl;
    cout << "5.按值插入(前插)" << endl;
    cout << "6.按值插入(后插)" << endl;
    cout << "7.按位置插入" << endl;
    cout << "8.前插" << endl;
    cout << "9.后插" << endl;
    cout << "10.按值删除" << endl;
    cout << "11.按位置删除" << endl;
    cout << "12.打印链表" << endl;
x:
    cout << "请输入您想执行的操作:" << endl;
    int m;
    cin >> m;
    switch (m)
    {
    case 1:
        cout << "请输入要插入的元素的数量:" << endl;
        int n1;
        cin >> n1;
        Frontbuild(list, n1);
        goto x;
    case 2:
        cout << "请输入要插入的元素的数量:" << endl;
        int n2;
        cin >> n2;
        Rearbuild(list, n2);
        goto x;
    case 3:
        cout << "请输入要查找的值:" << endl;
        int n3;
        cin >> n3;
        Checklink1(list, n3);
        goto x;
    case 4:
        cout << "请输入要查找的位置:" << endl;
        int n4;
        cin >> n4;
        Checklink2(list, n4);
        goto x;
    case 5:
        cout << "请输入要插入的值:" << endl;
        int a5;
        cin >> a5;
        cout << "请输入按何值插入:" << endl;
        int b5;
        cin >> b5;
        FrontInsertlink1(list, a5, b5);
        goto x;
    case 6:
        cout << "请输入要插入的值:" << endl;
        int a6;
        cin >> a6;
        cout << "请输入按何值插入:" << endl;
        int b6;
        cin >> b6;
        RearInsertlink1(list, a6, b6);
        goto x;
    case 7:
        cout << "请输入要插入的值:" << endl;
        int a7;
        cin >> a7;
        cout << "请输入要插入的位置:" << endl;
        int b7;
        cin >> b7;
        Insertlink2(list, a7, b7);
        goto x;
    case 8:
        cout << "请输入要插入的元素:" << endl;
        int n8;
        cin >> n8;
        Frontinsert(list, n8);
        goto x;
    case 9:
        cout << "请输入要插入的元素:" << endl;
        int n9;
        cin >> n9;
        Rearinsert(list, n9);
        goto x;
    case 10:
        cout << "请输入要删除的元素的值:" << endl;
        int n10;
        cin >> n10;
        Delete1(list, n10);
        goto x;
    case 11:
        cout << "请输入要删除的元素的位置:" << endl;
        int n11;
        cin >> n11;
        Delete2(list, n11);
        goto x;
    case 12:
        Printlist(list);
        goto x;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值