静态链表(C++实现)

用数组描述的链表,即称为静态链表。
在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标cur。

这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。

下图表示了静态链表的一中存储结构:
这里写图片描述
图中用彩色途上的是两个头结点,不存放数据,分别用来记录第一个备用节点和第一个数据节点的下标。
下面给出静态链表的C++实现代码:

首先给出头文件:StaticList.h:

#include<iostream>
#include<assert.h>
using namespace std;

#define MAXSIZE 20        // 静态链表(数组)默认长度
#define ElemType int      // 值类型

class StaticList;

//节点类
typedef class StaticListNode   // 静态链表的节点类型(数组元素类型)
{
    friend class StaticList;
private:
    ElemType data;              // 值域
    int      cur;               // 游标 (指示当前节点的下一个元素下标)
}StaticListNode;


//  静态链表类</strong></span>
class StaticList
{
public:
    StaticList()
    {
        for(int i = 2; i<MAXSIZE-1; ++i)
            space[i].cur = i+1;
        space[i].cur = 0;        //整个链表结束
        space[0].cur = 2;
        space[1].cur = 0;        //数据节点头的游标为空,没有数据
    }

    ~StaticList()
    {}

// 尾部插入法
    void push_back(const ElemType &x)
    {
        int i = Malloc_SL();
        if(0 == i)              // 空间申请失败
        {
            cout<<"已满!"<<x<<"不能插入"<<endl;   
            return ;
        }
        space[i].data = x;
        space[i].cur = 0;

        int k = 1;
        while(0!=k && 0!=space[k].cur)  // 找到最后一个节点
            k = space[k].cur;

        space[k].cur = i;             // 把刚申请的下标为i的节点链到最后一个节点后面              
    }

// 头部插入法
    void push_front(const ElemType &x)
    {
        int i = Malloc_SL();
        if(0 == i)            // 同上,空间申请失败
        {
            cout<<"已满!"<<x<<"不能插入"<<endl;
            return ;
        }
        space[i].data = x;    // 把x放入刚申请的节点中

        space[i].cur = space[1].cur;   // 此时刚申请的节点i的游标指向第一个数据节点,称为第一个结点
        space[1].cur = i;              // 使头结点指向第一个数据节点
    }

// 尾部删除
    void pop_back()
    {
        int i = space[1].cur;
        int j = 0;
        for(; 0!=space[i].cur; j = i, i = space[i].cur)
        {}    // 找到最后一个节点以及倒数第二个节点

        space[j].cur = 
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值