0
点赞
收藏
分享

微信扫一扫

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


      

 



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

举报

相关推荐

0 条评论