数组实现的Index链表管理

本文介绍了一种使用数组来实现链表的方法,这种方法适用于嵌入式系统等资源受限的环境。文章详细解释了如何利用索引作为节点之间的链接,并提供了一个简单的C语言实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     今天看代码,发现系统内有一段index维护的代码,看了很久才反应过来! 是用数组来实现设备上下文index链表的管理。说道链表理所当然就想到动态内存的实现方式,静态内存实现往往要移动数据块,而要维护的数据一旦很多,效率就会大打折扣。在嵌入式应用中尤其如此!
    代码使用数组实现链表,关键地方只有一点,就是用使用索引到的数据node[index]存储下一个数据标示的索引位置,从而不需要数据移动。实现起来也相当的简单,只是看你能否想的到。
    代码是用c写的,以下是精简之后的实现,在vc6.0和tornado2.2编译通过!
h文件:
#ifndef _INDEX_LIST_H_H_
#define  _INDEX_LIST_H_H_

#define  MAX_INDEX 20
#define  INVALID_INDEX -1
typedef 
struct {
    
int head;
    
int tail;
    
int    node[MAX_INDEX];
    
int    count;
}
IndexLIST_;
void  init();
int  GetIndex();
void  list();
void  AddIndex( int  id);
extern  IndexLIST_ gindexList;
#endif
c文件:
#include  " indexList.h "
IndexLIST_ gindexList;
void  init()
{
    
int i;
    gindexList.head 
= INVALID_INDEX;
    gindexList.tail 
= INVALID_INDEX;
    gindexList.count 
= 0;
    
for(i =0 ;i < MAX_INDEX;i++ )
    
{
        gindexList.node[i] 
= INVALID_INDEX;
    }

}

int  GetIndex()
{
    
int res;
    
if(gindexList.count <= 0return -1;
    res 
= gindexList.head;
    gindexList.count
--;
    
if(gindexList.count <= 0){
        gindexList.head 
= INVALID_INDEX;
        gindexList.tail 
= INVALID_INDEX;
    }

    
else
        gindexList.head 
= gindexList.node[res];
    gindexList.node[res] 
= INVALID_INDEX;
    
return res;
}

void  AddIndex( int  idx)
{
    
if(idx >= MAX_INDEX)
        
return;
    
if(gindexList.count <= 0){
        gindexList.head 
= idx;
        gindexList.tail 
= idx;
        gindexList.count 
= 1;
        
return;
    }

    gindexList.node[gindexList.tail] 
= idx;
    gindexList.tail 
= idx;
    gindexList.count
++;
}

void  list()
{
    
int i;
    printf(
"  head : %d ",gindexList.head);
    printf(
" tail : %d ",gindexList.tail);
    printf(
" count : %d ",gindexList.count);
    
for(i =0; i < MAX_INDEX ;i++)
        printf(
" node[%d] = %d  ",i,gindexList.node[i]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值