【数据结构】静态链表的实现(C语言描述)
#include <stdio.h>
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 1000 // 定义线性表最大容量
typedef int Status;
typedef int ElemType;
// 定义静态链表的存储结构
typedef struct
{
ElemType data; // 数据域
int curr; // 存放下一个节点在数组中的下标
} Node;
// 定义StaticLinkList
typedef Node StaticLinkList[MAXSIZE] ;
// 先初始化一个备用的静态表(其实是数组)
// L[0].curr = 1, L[1].curr = 2, L[2].curr = 3 ...
Status InitList(StaticLinkList L){
for(int i=0; i< MAXSIZE; i++){
L[i].curr = i+1;
}
// 当前静态链表为空表,最后一个元素所指向的下一个元素的下标为0(也就是指向一个元素)
L[MAXSIZE-1].curr = 0;
return OK;
}
// 获取空闲元素的下标 并将下标存放在L[0].curr 中
int GetBlankIndex(StaticLinkList L){
// L[0].curr 始终存的是空闲元素的下标
int blankIndex = L[0].curr;
if (L[0].curr) L[0].curr = L[blankIndex].curr;
return blankIndex;
}
Status ListInsert(StaticLinkList L, ElemType e){
int blankIndex = GetBlankIndex(L);
L[blankIndex].data = e;
return OK;
}
// 删除第i个元素
Status ListDelete(StaticLinkList L, int i){
return OK;
}
void Visit(StaticLinkList L){
int blankIndex = GetBlankIndex(L);
for (int i = 1; i < blankIndex; ++i) {
printf("%d ",L[i].data);
}
printf("\n");
}
int main() {
StaticLinkList L;
InitList(L);
for(int i=1; i<=5; i++){
ListInsert(L, i);
}
Visit(L);
}
“年轻时,我没受过多少系统教育,但什么书都读。读得最多的是诗,包括烂诗,我坚信烂诗早晚会让我邂逅好诗。”
by. 马尔克斯