模拟链表的思想很简单,就是通过一个数组存储数据值,再开一个数组存储下标,来模拟链表中的next指针,从而实现插入,删除。
通过right来记录,它的后继元素,当没有后继元素,它的right为-1。
插入数据时,把数据存在data的len+1位置,然后再修改其right,下图是插入数据10的时候的变化。
看代码吧~
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int jk[100], right[100];
int n, i, k, len;
cin >> n;
right[0] = 1;
for(i = 1; i <= n; ++i){
cin >> jk[i];
if(i == n) right[i] = -1;
else right[i] = i+1;
}
len = n;
while(cin >> k && k){ //插入数据
++len;
jk[len] = k;
i = 0; //从0开始可以实现表头插入
while(right[i] != -1 && jk[right[i]] < k) i = right[i];
right[len] = right[i];
right[i] = len;
}
i = right[0];
while(i != -1){
printf("%d ", jk[i]);
i = right[i];
}
printf("\n");
while(cin >> k && k){ //删除数据
i = 0;
while(right[i] != -1 && jk[right[i]] != k) i = right[i];
if(right[i] == -1) printf("NO This Data.\n");
else right[i] = right[right[i]];
}
i = right[0];
while(i != -1){
printf("%d ", jk[i]);
i = right[i];
}
printf("\n");
return 0;
}