【数据结构】静态链表的实现(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);
              
              
              
              }
              相关文章
              相关标签/搜索
              惠泽群社论坛精选资料