数组模拟链表 value[]数组存储数值 r[]数组存储链表数与数之间的位置关系
数组模拟链表初始化
#include<iostream>
using namespace std;
int value[101],r[101];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>value[i];
for(int i=1;i<=n;i++)
{
if(i!=n) r[i]=i+1;
else r[i]=0;
}
int t=1;
for(int i=1;i<=n;i++)
cout<<value[i]<< " ";
cout<<endl;
for(int i=1;i<=n;i++)
cout<<r[i]<< " ";
}
输入
6
10 9 8 6 5 4 2
输出
10 9 8 6 5 4
2 3 4 5 6 0 //0代表链表尾
1.在末尾插入值
2.在具体位置插入值
3.在具体位置删除值
4.在链表中插入任意值,链表的排序顺序不变
5.输出链表
此处下标以1开始的,可以具体问题具体对待
#include<iostream>
using namespace std;
int value[101],nt[101],len,nxt;
//在链表末尾中插入一个值
void init()
{
for(int i=1;i<=len;i++)
cin>>value[i];
for(int i=1;i<=len;i++)
{
if(i!=len) nt[i]=i+1;
else nt[i]=0;
}
}
void insertend(int x)
{
len++;
value[len]=x;
nt[len-1]=len;
nt[len]=0;
}
//在链表某个位置插入值具体问题具体分析
void insertmid(int x,int p)
{
len++;
value[len]=x;
value[len] =x;
nt[len]=nt[p-1];
nt[p-1]=len;
}
//删除某个位置的值
void del(int p)
{
nt[p-1]=nt[p];
}
//插入一个值,当前链表的排列顺序不变,比如当前从小到大
void insertrule(int x)
{
len++;
value[len]=x;
int t=1;
while(t)
{
if(value[t]>value[len])
{
nt[len]=nt[t-1];
nt[t-1]=len;
break;
}
t=nt[t];
}
}
void print()
{
int t=1;
while(t)
{
cout<<value[t]<<" ";
t=nt[t];
}
cout<<endl;
}
int main()
{
cin>>len;
init();
print();
insertend(10);
print();
insertmid(19,3);
print();
del(3);
print();
insertrule(8);
print();
return 0;
}
输入
9
1 2 3 4 5 6 8 9 19
输出
1 2 3 4 5 6 8 9 19
1 2 3 4 5 6 8 9 19 10
1 2 19 3 4 5 6 8 9 19 10
1 2 4 5 6 8 9 19 10
1 2 4 5 6 8 8 9 19 10
数组模拟双向链表
双向链表