#include "string.h"
#include "ctype.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define maxlen 1000
typedef struct node
{
int data;
int cur; /* 游标(Cursor) ,为0时表示无指向 */
} node, StaticLinkList[maxlen];
int initlist(StaticLinkList L)
{
int i;
for (i = 0; i < maxlen; i++)
{
L[i].cur = i + 1;
}
L[maxlen - 1].cur = 0;
return 1;
}
int get_free_space(StaticLinkList L)
{
int i;
i = L[0].cur; //i为当前第一个备用节点的序号
if (i)
{
L[0].cur = L[i].cur; //将第一个节点的cur变为,第一个备用节点的cur,即下一个备用节点的序号
}
return i;
}
int insert_list(StaticLinkList L,int i,int value)
{
int j, l, k;
k = maxlen - 1;
j = get_free_space(L);
if (i<1 || i>maxlen - 1 || !j)
{
return 0;
}
L[j].data = value;
for (l = 1; l < i; l++)
{
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return 1;
}
int see_list(StaticLinkList L)
{
int j = 0;
int i = L[maxlen - 1].cur;
while (L[i].data)
{
printf("%d ",L[i].data);
i = L[i].cur;
j++;
}
printf("\n");
return 1;
}
int delet_list(StaticLinkList L,int i)
{
int j, k, l;
k = maxlen - 1;
for (l = 1; l < i; l++)
{
k = L[k].cur; //k是第i个节点前面那个节点的序号
}
j = L[k].cur; //j是我要删除的那个点的序号
L[k].cur = L[j].cur;
L[j].cur = L[0].cur;
L[0].cur = j;
return 1;
}
int see_reallist(StaticLinkList L)
{
int i;
printf("the real list:\n");
for (i = 1; i < 15; i++)
{
printf("%d ", L[i].data);
}
printf("\n");
for (i = 1; i < 15; i++)
{
printf("%d ", L[i].cur);
}
printf("\nL[maxlen-1]=%d\n", L[maxlen - 1].cur);
return 1;
}
int listlenght(StaticLinkList L)
{
int i, k;
i = 0;
k = L[maxlen - 1].cur;
while (L[k].data)
{
k = L[k].cur;
i++;
}
return i;
}
int main()
{
StaticLinkList L;
int i, j;
initlist(L);
for (i = 0; i < 7; i++)
{
insert_list(L, 1, i);
}
see_list(L);
insert_list(L, 3, 88);
see_list(L);
j = listlenght(L);
printf("changdus %d\n", j);
delet_list(L,5);
see_list(L);
j = listlenght(L);
printf("changdus %d\n", j);
}
静态链表C语言实现
最新推荐文章于 2022-08-09 21:50:57 发布