代码及注释:
#include<stdio.h>
int main()
{
int data[101];
int right[101];
int i, n, len, t;
printf("请输入节点数:");
scanf("%d", &n);
printf("请输入%d个数:", n);
for (i=1; i<=n; i++)
{
scanf("%d", &data[i]);//读入已有数据
}
len = n;
for (i=1; i<=n; i++)//初始化数组right
{
if (i != n)
{
right[i] = i + 1;
}
else
{
right[i] = 0;
}
}
printf("请输入待插入数据:");
scanf("%d", &data[++len]);//将所插入数加在数组data末尾
t = 1;//从链表头部开始遍历
while (t !=0)
{
if (data[right[t]] > data[len])//如果当前结点下一个结点的值大于待插入数据,将数插入到中间
{
right[len] = right[t];//新插入数的下一个结点标号等于当前结点的下一个结点编号
right[t] = len;//当前结点的下一个结点编号就是新插入数的编号
break; //插入完跳出循环
}
t = right[t];
}
t = 1;//输出链表所有数
printf("插入数据后:");
while (t != 0)
{
printf("%d ", data[t]);
t = right[t];
}
return 0;
}
示例输出: