Advertisement

第2章第5节-模拟链表

阅读量:

具体原理: 其中一个整形数组 data 用于存储序列中的具体数字, 另一个整形数组 right 用于存储当前序列中每个元素右侧元素在 data 中的位置.

#include <stdio.h>
int main()
{
int data[101], right[101];
int i, n, t, len;
//读取现有的数值
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &data[i]);
len = n;
//初始化right数组
for(i = 1; i <= n; i++)
{
if(i < n)
right[i] = i + 1;
else
right[i] = 0;
} //将新数值添加到data数组末尾
len++;
scanf("%d", &data[len]);
//从链表头部开始遍历
t = 1;
while(t != 0)
{
if(data[right[t]] > data[len]) //如果当前节点下一个节点值大于待插入数值,则将新数值插在当前节点之后
{
right[len] = right[t]; //新节点的下一个节点编号等于当前节点的下一个编号
right[t] = len; //当前节点的下一个编号变为新节点编号
break;
} //插入完成退出循环
t = right[t];
}
//输出链表中的所有数据项
t = 1;
while(t != 0)
{
printf("%d ", data[t]); //依次输出链表中的每个数据项
t = right[t];
}
getc(); //等待用户输入并按回车键退出程序
getc(); return 0;
}
************************************\n

全部评论 (0)

还没有任何评论哟~