优点:1.无需为表示表中元素之间的逻辑关系而增加额外的存储空间。
2.可以快速的存取表中任意位置的元素
缺点:1.插入和删除操作需要移动大量的元素
2.当线性表长度变化较大时,难以确定存储空间的大小
3.造成存储空间的“碎片”
LineList.h文件
#ifndef _LINE_LIST_H
#define _LINE_LIST_H
#define MAXSIZE 20
typedef int ElemType;
typedef int BOOL;
#define TRUE 1
#define FALSE 0
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
//获取元素
BOOL GetElem(SqList* pLi,int index, ElemType* pValue);
//插入数据
BOOL InsertElem(SqList* pLi,int index, ElemType value);
//删除一个元素 pEt:OUT, 删除的元素
BOOL DeleteElem(SqList *pList,int index,ElemType *pEt);
#endif
LineList.cpp文件
/*
线性链表结构
*/
//#include "stdafx.h"
#include "LineList.h"
//获取元素
BOOL GetElem(SqList* pLi,int index, ElemType* pValue)
{
if(pLi->length<= 0 || index<=0 || index>=pLi->length)
{
return FALSE;
}
*pValue = pLi->data[index-1];
return TRUE;
}
//插入数据
BOOL InsertElem(SqList* pLi,int index, ElemType value)
{
int k=0;
//是否在范围内
if(index<1 || index>pLi->length+1)
{
return FALSE;
}
//是否已满
if(pLi->length >= MAXSIZE)
{
return FALSE;
}
//插入位置之后的元素全部后移一位
//插入位置不在表尾
if(index <= pLi->length)
{
for(k=pLi->length;k>=index;k--)
{
pLi->data[k] = pLi->data[k-1];
}
}
pLi->data[index-1] = value;
pLi->length++;
return TRUE;
}
//删除一个元素 pEt:OUT, 删除的元素
BOOL DeleteElem(SqList *pList,int index,ElemType *pEt)
{
int k;
//是否在有效的范围内
if(index<1 || index>pList->length)
{
return FALSE;
}
*pEt = pList->data[index-1];
//是否为最后一个元素
if(index != pList->length)
{
//往前移动
for(k=index;k<pList->length;k++)
{
pList->data[k-1] = pList->data[k];
}
}
//长度减一
pList->length--;
return TRUE;
}