线性表——顺序存储

 线性表的顺序存储结构时间复杂度:

线性表的顺序存储结构,在存、读数据时,不管是哪个位置,时间复杂度都是O(1);而插入或删除元素时,时间复杂度都是O(n);

线性表的顺序存储结构优缺点:

优点:

1、无须为表示表中元素之间的逻辑关系而增加额外的外存空间

2、可以快速地存取表中任一位置的元素

缺点:

1、插入和删除操作需要移动大量元素

2、当线性表长度变化较大时,难以确定存储空间的容量

3、造成存储空间的“碎片”

#include
using namespace std;
#define MaxSize 20    //存储最大空间
#define TRUE 1
#define FALSE 0
typedef int Status;    //函数的类型,函数结果状态的返回,TRUE成功FALSE失败
typedef int ElemType;    //定义线性表元素类型
typedef struct SequenceList
{
	ElemType data[MaxSize];	    //数组存储线性表
	int length;       //线性表当前长度
}SqList; //SqList=struct SequenceList=SequenceList
//初始化线性表
Status InitList(SqList *L)
{
	L->length=0;
	return TRUE;
}
//判断线性表是否为空
Status ListEmpty(SqList L)
{
	if(L.length==0)
		return FALSE;
	else
	    return TRUE;
}
//清空线性表
Status ClearList(SqList *L)
{
	L->length=0;
	return TRUE;

}
//获得线性表第i个位置元素返回给e
Status GetElem(SqList L,int i,ElemType *e)
{
	if(i<1 || i>L.length || L.length==0)
		return FALSE;
	*e=L.data[i-1];
	return TRUE;
}
//在线性表中找到与e相同的元素返回位置
int LocateElem(SqList L,ElemType e)
{
    for(int j=0;jL->length+1 || L->length==MaxSize || i<1)
		return FALSE;
	if(i<=L->length)
	{
		for(int j=L->length-1;j>=i-1;j--)
		{
			L->data[j+1]=L->data[j];
		}
		L->data[i-1]=e;
	}
	else{
		L->data[i-1]=e;
	}
	L->length++;
	return TRUE;
}
//删除线性表中第i个位置元素并将e返回
Status ListDelete(SqList *L,int i,ElemType *e)
{
	if(i<1 || i>L->length || L->length==0)
		return FALSE;
	*e=L->data[i-1];
	if(ilength)
	{
		for(int j=i;j<=L->length-1;j++)
			L->data[j-1]=L->data[j];
	}
	L->length--;
    return TRUE;
}
//返回线性表的元素个数
int ListLength(SqList L)
{
    return L.length;
}
//将线性表Lb中但不在La中的元素插入La中
void unionL(SqList *La,SqList Lb)
{
    ElemType e;
	int i,j,La_len,Lb_len;
	La_len=ListLength(*La);
	Lb_len=ListLength(Lb);
	for(i=0;i

 

你可能感兴趣的:(数据结构与算法分析)