• 和菜鸟一起学数据结构之简单静态链表实现


           一般情况下,我们要嘛用数组,要嘛就用链表来实现一些线性的数据结构,很少用静态链表。一种基于数组的,具有链表的性质的数据结构。简单的写了个小程序。

     

    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include <string.h>
    
     
    
    #define MAXNUM 1000
    
     
    
    typedef struct
    
    {
    
           int data;
    
           int cur;
    
    }List[MAXNUM], Link;
    
     
    
    void list_create(Link *list);
    
    void list_insert(Link *list, int value);
    
    void list_delete(Link *list, int value);
    
    void list_print(Link *list);
    
     
    
    int main(void)
    
    {
    
           List list;
    
           int i;
    
           
    
           list_create(list);
    
           
    
           for(i = 1; i < 9; i++)      
    
                  list_insert(list, i);
    
           
    
           list_print(list);
    
           printf("\n");
    
           
    
           list_delete(list, 2);
    
           
    
           list_print(list);
    
           printf("\n");
    
           
    
           
    
           return 0;
    
    }
    
     
    
    /*
    
           静态链表的链表头
    
    */
    
    void list_create(Link *list)
    
    {
    
           list[0].cur = 0;
    
           list[0].data = 1;      
    
    }
    
     
    
    /*
    
           静态链表中插入一个元素
    
    */
    
    void list_insert(Link *list, int value)
    
    {
    
           int i;
    
           int len;
    
           
    
           i = 0;
    
           
    
           while(list[i].cur != 0) i = list[i].cur;
    
                  
    
           len = list[0].data++;
    
     
    
           list[i].cur = len;
    
           
    
           list[len].data = value;
    
           list[len].cur = 0;
    
    }
    
     
    
    /*
    
           静态链表中删除一个元素
    
    */
    
    void list_delete(Link *list, int value)
    
    {
    
           int i;
    
           int len;
    
     
    
           if(list[0].data == 1)
    
           {
    
                  printf("Empty list\n");
    
                  return;     
    
           }     
    
           
    
           i = 0;
    
           
    
           while(list[i].cur != 0)
    
           {
    
                  if(list[list[i].cur].data == value)
    
                  {
    
                         list[i].cur = list[list[i].cur].cur;     
    
                  }
    
                 i = list[i].cur;
    
           }
    
    }
    
     
    
    /*
    
           打印数组中所有的元素,或者打印链表中的元素
    
    */
    
    void list_print(Link *list)
    
    {
    
           int i;
    
           
    
           if(list[0].data == 1)
    
           {
    
                  printf("Empty list\n");
    
                  return;     
    
           }            
    
           
    
           i = 0;
    
           
    
           while(list[i].cur != 0)
    
           { 
    
                  printf("%d  %d\n", list[i].data, list[i].cur);
    
                  i = list[i].cur;
    
           }
    
           printf("%d  %d\n", list[i].data, list[i].cur);
    
    /*           
    
           for(i = 0; i < list[0].data; i++)
    
                  printf("%d  %d\n", list[i].data, list[i].cur);
    
    */
    
    }
    
    


     

           所谓的静态链表就是多了一个光标,类似于链表中的指针,好比把所有的数据都串起来了一样。

    比如:

           I   data    cur
    
           0     5      1
    
           1     1      3            
    
           2    2      4
    
           3    5      2
    
           4   6     0
    
    


     

    上面就是一个静态链表了。

    首先从表头i=0处开始吧。0-->1 ,  1-->3,  3-->2,  2-->4,  4-->0。这样就是一个链着的链表了,数据还是存放在那里,不过只是有个光标的指向不同而已。就好比,单链表中数据也是动态申请来了后固定在一个内存空间,然后有个指针把所有的串起来。但是这个静态链表他又有可以当数组用,可见他的强大了。

  • 相关阅读:
    ASP.NET 使用Ajax(转)
    使用Docker,很多坑(之一):在windows中使用
    .NET Core 各种学习资源
    docker-compose.yml配置文件详解(转)
    英雄无敌王国刷将脚本
    Valid format values for declare-styleable/attr tags[转]
    no Session问题,即延迟加载
    适配器模式--Adapter Pattern
    策略模式--Strategy
    装饰模式--Decorator Pattern
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300050.html
Copyright © 2020-2023  润新知