啊哈算法之模拟链表

链表中的每一个节点只有两个部分。一个存放数据,一个存放下一个节点的地址。

定义两个数组。data[]用来存放数据,每次增加节点,直接在数组data的末尾增加一个值存放新加节点的数据值。len++;scanf("%d",&data[len]);

                         right[]用来存放下一个节点的地址,从头开始遍历比较新的节点的数据值的大小。当下一个节点的数据值比data[len]大时,将新节点的地址值放到下一个节点的数据值前。

t=1;

while(t != 0)

{

     if(data[right[t]] > right[t])

    {

        right[len] = right[t];

        right[t] = len;

        break;

    }

    break;

}

#include <stdio.h>
#include <iostream>

int main()
{
    int data[101],right[101];//data存放字节中数据值,right存放字节中地址值
    int i, n,t,len;


    //上传字节数据值
    scanf_s("%d", &n);
    //getchar();
    for (i = 1; i <= n; i++)
        scanf_s("%d", &data[i]);

    //上传字节地址值
    t = 1;
    for (t = 1; t <= n; t++)
    {
        if (t != n)
            right[t] = t + 1;
        else
            right[t] = 0;
    }

    //有新的字节要加入进来,首先把此字节的数据值存入到数据数组中
    n++;
    scanf_s("%d", &data[n]);

    //再将此字节的地址值存入到相应的地址数组中
    t = 1;
    while (t != 0)
    {
        if (data[right[t]] > data[n])
        {
            right[n] = right[t];
            right[t] = n;
            break;
        }
        t = right[t];
    }

    //输出所有字节的值
    t = 1;
    for (i = 1; i <= n; i++)
    {
        printf("%d\t", data[t]);
        t = right[t];
    }

    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/janmesyang/article/details/81878144
今日推荐