• 模拟链表


    上一节讲解了单链表的链式存储规则,本节讲解如何模拟链式存储的。

    规则:开两个数组,一个data[N]  另一个right[N]。data数组用来存储数据,right数组用来表示当前序列中每个元素右边元素在datat数组中的位置。

    例如:

    上图的两个数组中,第一个整型数组data 是用来存放序列中具体数字的,另外一个整型数组right 是用来存放当前序列中每一个元素右边的元素在数组data 中位置的。例如right[1]的值为2,就表示当前序列中1 号元素右边的元素存放在data[2]中;如果是0,例如right[9]的值为0,就表示当前序列中9 号元素的右边没有元素。   最后遍历数据data[right[i]] 即可删除!

    具体代码如下:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define N 101
     4  
     5 int main()
     6 {
     7    int data[N],right[N];
     8    int i,n,t,len;
     9    //读入已有的数据
    10    scanf("%d",&n);
    11    for(i=1;i<=n;i++)
    12     scanf("%d",&data[i]);
    13    len=n;
    14    //初始化数组right
    15    for(i=1;i<=n;i++)
    16    {
    17        if(i!=n)
    18         right[i]=i+1;
    19        else
    20         right[i]=0;
    21    }
    22    //直接在数组data的末尾增加一个数
    23    len++;
    24    scanf("%d",&data[len]);
    25    //从链表的头部开始遍历
    26    t=1;
    27    while(t!=0)
    28    {
    29        if(data[right[t]]>data[len])   //找到要插入的节点的位置
    30        {
    31            right[len]=right[t];    //新插入节点的下一个节点即为当前节点的下一个节点
    32            right[t]=len;            //当前节点的下一个节点为新插入节点
    33            break;
    34        }
    35        t=right[t];       //构成循环,相当于链表中的p=p->next
    36    }
    37    //输出链表中的所有的数
    38    t=1;
    39    while(t!=0)
    40    {
    41       printf("%d  ",data[t]);
    42        t=right[t];           // 相当于链表中的p=p->next    
    43    }
    44     printf("
    ");
    45     return 0;
    46 }
  • 相关阅读:
    Map集合
    Collections 工具类
    LinkedList 集合
    List集合
    Iterator迭代器
    Collection集合
    时间日期类
    一看就懂!速写docker 容器数据库备份脚本
    Nginx 配置之HTTPS和WSS那些你不知道的事!
    https 证书认证/颁发/秒级认证无烦恼
  • 原文地址:https://www.cnblogs.com/guohaoblog/p/9242099.html
Copyright © 2020-2023  润新知