静态链表学习代码-不能用指针时在数组中的单链表实现

本文详细介绍了在不使用指针的情况下,如何利用数组来实现静态链表。通过静态链表的概念,讲解了节点的定义、链表的插入和遍历等操作,帮助读者理解静态链表的实现细节。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#define ArrayMaxSize 1102//足够大的数组空间
//线性表-静态链表
//顺序存储的优点 (随机存取快O(1))缺点(删除插入操作效率低时间复杂度为O(n)  大小无法随意更改)
//非连续内存链式结构的优点(插入删除时间复杂度均为O(1) 大小随时改变) 缺点(无法随机存取,查找时间复杂度为O(n))
//静态链表用于不支持指针使用的编程环境,用结构体数组实现
//静态链表的优点(用数据成员游标充当指针的角色,有链式结构的优点)缺点(依然无法解决数组大小固定的问题,查找效率不高)
typedef struct StaticList{
    int data;
    int Cursor;//游标
}S_List;
unsigned SList_Length=0;//表长一开始为0
S_List Base[ArrayMaxSize];
unsigned exist = 0;//是否执行了第一次初始化
void Initialize_StaticList(unsigned ElementNumber)
{
    SList_Length=ElementNumber;//表长更新
    unsigned index;
    Base[ArrayMaxSize-1].Cursor=1;//更新第一个有数据结点的位置
    for(index=1;index<ElementNumber;index++)
    {
        Base[index].data=rand()%100 +1;//先生成n-1个有数据结点
        Base[index].Cursor=index+1;
    }
    Base[ElementNumber].data=index;
    Base[ElementNumber].Cursor=0;//最后一个结点游标为0以作识别
    Base[0].Cursor=ElementNumber+1;//Base[0]记录备用结点空间的第一个位置
    if(ElementNumber<ArrayMaxSize-100)for(index=ElementNumber+1;index<ArrayMaxSize-1;index++)Base[index].Cursor=index+1;
    //若表长没有接近数组空间限制,剩下的备用结点生成备用链表,数组最后一个元素用来记录有数据链表的第一个结点下标
}
void PrintAllElements_StaticList()
{
    if(SList_Length<1){
  printf("List is empty.\n");return;}
    unsigned index=Base[ArrayMaxSize-1].Cursor;//index赋值为第一个有数据结点的位置
    while(index!=0)//当有数据表不为空表且未识别到表尾结点,输出下标index的结点数据
    {
        printf("%-4d",Base[index].data);
        index=Base[index].Cursor;
    }
}
void Insert_ElementInto_StaticList(unsigned Order_InsertBefore)
{
    if(SList_Length<1){
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值