#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); }