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