模拟链表,用模拟链表实现插入排序

模拟链表


        模拟链表不同于链表,不需要用到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;
}


猜你喜欢

转载自blog.csdn.net/qq2071114140/article/details/80218552