C语言实现线性表之顺序存储结构操作

线性表(List):零个或者多个数据元素的有限序列。

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

可用C语言的一维数组来实现顺序存储结构。

对于线性表的顺序存储结构来说,对每个线性表位置的存入或者读取数据,对于计算机来说都是相等的时间,也就是一个常数,它的存取性能为O(1)。通常把具有这一特点的存储结构称为随机存取结构。

 

顺序存储结构c语言代码如下:

#define MAXSIZE 20    /*存储空间初始分配量*/ 
typedef int ElemType;  /*ElemType类型根据实际情况而定,这里假设为int*/ 
typedef int Status;
typedef struct
{
	ElemType data[MAXSIZE];   /*数组存储数据元素,最大值为MAXSIZE*/ 
	int length;				  /*线性表当前长度*/ 
}SqList;


 获取线性表元素的操作的c语言代码:

#define OK 1
#define ERROR 0

/*初始条件:顺序线性表L已经存在,1<=i<=ListLength(L)*/
/*操作结果:用e返回L中第i个数据元素的值*/
Status GetElem(SqList L, int i, ElemType *e)
{
	if (L.length == 0 || i < 1 || i > L.length)
	{
		return ERROR;
	}
	*e = L.data[i-1];
	return OK;
} 

 

插入操作思路:

  • 如果插入位置不合理,抛出异常;
  • 如果线性表长度大于等于数组长度,则抛出异常或者动态增加容量;
  • 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
  • 将要插入元素填入i处;
  • 表长加1

c语言代码:

Status ListInsert(SqList *L, int i, ElemType e)
{
	int k;
	if (L->length == MAXSIZE)
	{
		return ERROR;
	}
	if (i < 1 || i > L->length+1)
	{
		return ERROR;
	}
	if (i <= L->length)
	{
		for (k = L->length-1; k >= i-1; k--)
		{
			L->data[k+1] = L->data[k];
		}
	}
		L->data[i-1] = e;
		L->length++;
		return OK;
}


删除操作思路

  • 如果删除位置不合理,抛出异常;
  • 取出删除元素;
  • 从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
  • 表长减1.

删除操作c语言代码:

Status ListDelete(SqList *L, int i, ElemType *e)
{
	int k;
	if (L->length == 0)
	{
		return ERROR;
	}
	if (i < 1 || i > L->length)
	{
		return ERROR;
	}
	*e = L->data[i-1];
	if (i < L->length)
	{
		for (k = i; k < L->length; k++)
		{
			L->data[k-1] = L->data[k];
		}
	}
	L->length--;
	return OK;
} 


根据以上的描述可知,线性表的顺序存储结构的插入和删除操作的时间复杂度都为O(n)。因此,它比较适合元素个数不太变化,而更多是存取数据的应用。

你可能感兴趣的:(删除,数组,插入,线性表,顺序存储结构)