数据结构4

获得元素操作

实现GetElem的具体操作,即将线性表L中的第i个位置的元素值返回。(我们只需把数组第i-1下标的值返回即可)

#define OK 1
#define  ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;

//Status 是函数的类型,其值是函数结果状态代码,如OK等
//初始条件,顺序表L已存在,i <= 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;
}

插入操作

实现ListInsert(*L, i, e),即在线性表L中的第i个元素位置插入新元素e。

思路:

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

//初始条件,顺序表L已存在,i <= i <= ListLength(L)
//操作结果,在L中第i个元素位置插入新元素e,L长度+1

Status ListInsert(Sqlist *L, int i, ElemType e)
{
	int k;
	
	if(L->Length == MAXSIZE)   //顺序表已经满了 
	{
		return ERROR;
	}
	if(i < 1 || i > L->Length+1)  //当i不在范围内时 
	{
		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; 
 }
posted @ 2019-09-28 23:10  ZhouWei211  阅读(199)  评论(0编辑  收藏  举报