静态链表实现

项目相关代码在码云托管

#pragma once
#include "StaticChain.h"

StaticChain::StaticChain(int size):m_size(size)
{
    m_list=new Node[size];
    current_size=0;
}
StaticChain::~StaticChain()
{
    delete[] m_list;
    m_list=NULL;
    m_size=0;
    current_size=0;
}
bool StaticChain::InitList()
{
    for (int i = 0; i < m_size-1; i++)
    {
        m_list[i].cur=i+1;
    }
    m_list[m_size-1].cur=0;//数组最后一个元素指向第一个插入数组的元素 代表头结点
    return true;
}
int StaticChain::ListLength()
{
    return current_size;
}
//返回当前第一个空置的坐标位置,并将0号位置指向的备用位置向后挪一位
int StaticChain::MallocInt()
{
    int i=m_list[0].cur;
    if(i)
    {
        m_list[0].cur=m_list[i].cur;
    }
    return i;
}
bool StaticChain::InsertList(int i,int data)
{
    int k=m_size-1,j;
    if(ListLength()==m_size-2) return false;
    if(i<1||i>ListLength()+1)
        return false;
    j=MallocInt();
    if(j)
    {
        m_list[j].data=data;
        //将当前元素切换到要插入位置之前的位置上
        for (int l = 1; l < i; l++)
        {
            k=m_list[k].cur;
        }
        if(current_size!=0) 
        {
            if(j!=m_list[k].cur)
                m_list[j].cur=m_list[k].cur;
            m_list[k].cur=j;
        }
        else 
        {
            m_list[k].cur=j;
        }
        current_size++;
        return true;
    }
    return false;
}

bool StaticChain::DeleteList(int i)
{
    int temp=m_size-1;
    if(i<1||i>current_size)
        return false;
    if(i==m_list[m_size-1].cur)
    {
        if(ListLength()==1)
            m_list[m_size-1].cur=m_list[m_list[m_size-1].cur].cur;
        else
            m_list[m_size-1].cur=0;
    }
    for (int k = 1; k < i; k++)
    {
        temp=m_list[temp].cur;
    }
    int j=m_list[temp].cur;
    m_list[temp].cur=m_list[j].cur;
    Free_SSL(j);
    current_size--;
    return true;
}
void StaticChain::Free_SSL(int i)
{
    m_list[i].cur=m_list[0].cur;
    m_list[0].cur=i;
}

你可能感兴趣的:(静态链表实现)