静态链表的增删操作

头文件

#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include<stdio.h>

#define MAX_SIZE 20
#define Elemtype char

typedef struct ListNode
{
    Elemtype data;
    int      cur;
}ListNode;

typedef ListNode StaticList[MAX_SIZE];

int Malloc_SL(StaticList &space);
void Free_Sl(StaticList &space,int k);
void InitSList(StaticList &space);  //&  引用类型,即space是传递参数SL的别名,使数组类型更简单,以引用的方式,避免使用数组指针
void Insert(StaticList &space,Elemtype x);
void Delete(StaticList &space);
void ShowSList(StaticList &space);


#endif //_SEQLIST_H_

源文件(方法)

/*静态链表:用数组描述(模拟)的链表*/

#include "Staticlist.h"
/*申请备用空间*/
int Malloc_SL(StaticList &space)
{
    int i = space[1].cur;
    /*存在多余的备用空间*/
    if(space[1].cur != 0)
    {
        space[1].cur = space[i].cur;
    }
    return i;   //返回申请的备用空间i位置
}
//回收空间
void Free_Sl(StaticList &space,int k)
{
    space[k].cur = space[1].cur;
    space[1].cur = k;
}

void InitSList(StaticList &space)
{
    for(int i = 1;i < MAX_SIZE-1;i++)
    {
        space[i].cur = i+1;
    }
    space[MAX_SIZE-1].cur = 0;
    space[0].cur = -1;
}
/*插入数据*/
void Insert(StaticList &space, Elemtype x)
{

    int i = Malloc_SL(space);    //申请空间
    if(i == 0)
    {
        printf("StaticList is full!\n");
        return;
    }
    space[i].data = x;
    /*插入节点为第一个节点*/
    if(space[0].cur == -1)
    {
        space[i].cur = -1;
    }
    /*不是第一个节点只需要头插*/
    else
    {
        space[i].cur = space[0].cur;
    }
    space[0].cur = i;
}
/*头删,删除元素+回收节点*/
void Delete(StaticList &space)
{
    int i = space[0].cur;
    space[i].data = 0;
    space[0].cur = space[i].cur;    //回收节点

    Free_Sl(space,i);   //合并备用空间,即释放节点

}

void ShowSList(StaticList &space)
{
    int i = space[0].cur;
    while(i != -1)
    {
        printf("%c-->",space[i].data);
        i = space[i].cur;
    }
    printf("Nul.\n");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值