可视化执行链表源码
代码仅供参考
头文件
#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;
}
}