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

来源:互联网 发布:华为 中兴 知乎 编辑:程序博客网 时间:2024/06/05 02:15

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

 

#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。这样就是一个链着的链表了,数据还是存放在那里,不过只是有个光标的指向不同而已。就好比,单链表中数据也是动态申请来了后固定在一个内存空间,然后有个指针把所有的串起来。但是这个静态链表他又有可以当数组用,可见他的强大了。

原创粉丝点击