项目相关代码在码云托管
#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;
}