模拟链表
模拟链表不同于链表,不需要用到malloc()函数,所以不能实现动态定义。链表中的数据及下一个节点的地址被定义为一个结构体,而在模拟链表中,用两个数组来存储这两部分,两个数组中相同下标的可以视为一个整体,一个数组存储数据,另一个存储下个节点的地址(下标).
用模拟链表实现插入排序
#include <stdio.h>
int main(void)
{
int date[100],right[100]; //date[]存储数据,right[]存储下一节点下标
int head,i,n,t; //head用来存储链表第一个节点的下标
head=1; //将head初始化为一
right[head]=0; //开始的时候,第一个节点的下一个节点下标为0
//相当于链表中的后继为NULL
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",date+i);
if(i>1)
{
if(date[head]>date[i])
{
right[i]=head;
head=i;
}
else
{
t=head;
while(t!=0) //遍历链表,找到"位置"
{
if(date[right[t]]>date[i] || 0==right[t])
{
right[i]=right[t]; //将t所在节点的后续节点的地址给i的后续节点
right[t]=i; //将t所在节点的后续节点设置为i
break; //不加break会陷入死循环
}
t=right[t];
}
}
}
}
t=head;
while(t) //遍历链表,并输出链表中的值
{
printf("%-4d",date[t]);
t=right[t];
}
return 0;
}