模拟链表是由2个数组组成,第一列是数据实体,第二列储存实体的角标(对应真实链表的地址)。
#include <iostream>
using namespace std;
int main()
{
int data[101], right[101];//数组right--保存的是data角标
int i, n , t, len;
cin >> n;
//输入第一个数;也可以放在while循环体内部,需要改一点条件
cin >> data[1];
len = 1;
//初始化
right[0] = 1;
right[1] = 0;
//直接在数组data的末尾增加一个数
while (len < n){
len++;
cin >> data[len];
//从链表的头部开始遍历
t = 0;
while (right[t] != 0)
{
if (data[right[t]] > data[len])//如果当前结点下一个结点的值大于待插入数,将
{
right[len] = right[t];//新插入数的下一个结点标号等于当前结点的下一个结
right[t] = len;//当前结点的下一个结点编号就是新插入数的编号
break;//插入完成跳出循环
}
t = right[t];
if (right[t]==0)//如果下一个结点的地址等于0,表示到了最后了
{
right[t] = len;//当前结点的下一个结点编号就是新插入数的编号
break;//插入完成跳出循环
}
}
}
//输出链表中所有的数
t = 0;
while (right[t] != 0)
{
cout<< data[right[t]]<<" ";
t = right[t];
}
//cout << data[right[t]] << " ";
system("pause");
return 0;
}
自己简单测试了一下可行。
另外,发现还可以用二叉树进行排序,哈