模拟链表
和上一节指针差不多,这里用了两个数组,一个表示第一次所存数据第二个表示依次所对应数右侧数位置
比如data[1]=1,data[2]=3,data[3]=4
则定义right[1]=2,表示第一个数右侧数即data[1]右侧数3,在data中位值是2,同理right[2]=3,right[3]=0(这里0表示右侧没有数据)
以下为具体代码实现
#include<stdio.h>
int main()
{
int data[101],right[101];
int i,t,n,len,a;
scanf("%d",&n); //输入数据个数
for(i=1;i<=n;i++)
scanf("%d",&data[i]);
//初始化right数组
for(i=1;i<=n;i++)
{
if(i==n)
right[i]=0;
else
right[i]=i+1;
}
scanf("%d",&data[n+1]);
//从链表头部开始遍历
t=1;
while(t!=0)
{
if(data[right[t]]>data[n+1])
{
right[n+1]=right[t]; //插入数右侧数位置为当前数据右侧数位置
right[t]=n+1; //当前数的右侧数位置为插入位置数
break;
}
t=right[t];
}
t=1;
while(t!=0)
{
printf("%d ",data[t]);
t=right[t];
}
getchar();getchar();
return 0;
}