线性表的顺序存储结构---顺序表的基本操作

  • 内容
  • 相关

线性表有两种基本的存储结构:线性存储结构链式存储结构。采用顺序存储结构的线性表通常称为顺序表

/*用C语言定义线性表的顺序存储结构*/
#define MAXSIZE 100    /*此处的宏定义常量表示线性表的最大长度*/
typedef struct
{
	ElemType elem[MAXSIZE];   /*线性表占用的数组空间*/
	int last;  /*记录线性表中最后一个元素在数组elem[]中的位置*/
}SeqList;
/*顺序表的按内容查找运算*/
int Locate(SeqList L,ElemType e)
{	/*在顺序表L中查找与e相等的元素,若L.elem[i]=e,则找到该元素,并
	返回i+1,若找不到,则返回0*/
	i=0;  /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
	while((i<=L.last)&&(L.elem[i]!=e))
		i++;
	if(i<=L.lat)
		return (i+1);  /*若找到,则返回其序号*/
	else
		return (0);  /*若未找到,则返回空序号*/
}
/*顺序表的插入运算*/
#define OK 1
#define ERROR 0
int InsList(SeqList *L,int i,ElemType e)
{/*在顺序表L中第i个数据元素之前插入一个元素e。i的合法取值1<=i<=L->last+2*/
	int k;
	if((i<1)||(i>L->last+2)) /*首先判断插入位置是否合法*/
	{
		printf("插入位置i值不合法");
		return (ERROR);
	}
	if(L->last>=MAXSIZE-1)
	{
		printf("表已满,无法插入");
		return (ERROR);
	}
	for(k=L->last;k>=i-1;k--)  /*为插入元素而移动位置*/
		L->elem[k+1]=L->elem[k];
	L->elem[i-1]=e;  /*在C语言数组中,第i个元素的下标为i-1*/
	L->last++;
	return (OK);
}
/*顺序表的删除运算*/
int DelList(SeqList *L,int i,ElemType *e)
{/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值1<=i<=L.last+1*/
	int k;
	if((i<1)||(i>L.last+1))
	{
		printf("删除位置不合法");
		return (ERROR);
	}
	*e=L->elem[i-1]; /*将删除的元素存放到e所指向的变量中*/
	for(k=i;i<=L->last;k++)
		L->elem[k-1]=L->elem[k]; /*将后面的元素依次前移*/
	L->last--;
	return (OK);
}
/*线性表的合并运算*/
void mergeList(SeqList *LA,SeqList *LB,SeqList *LC)
{
	int i,j,k,l;
	i=0;j=0;k=0;
	while(i<=LA->last&&j<=LB->last)
		if(LA->elem[i]<LB->elem[j])
		{
			LC->elem[k]=LA->elem[i];
			i++;k++;
		}
		else
		{
			LC->elem[k]=LB->elem[j];
			i++;k++;
		}
		while(i<=LA->last) /*当LA有剩余元素时,则将表LA余下的元素赋给表LC*/
		{
			LC->elem[k]=LA->elem[i];
			i++;k++;
		}
		while(j<=LB->last) /*当LB有剩余元素时,则将表LB余下的元素赋给表LC*/
		{
			LC->elem[k]=LB->elem[j];
			i++;k++;
		}
		LC->last=LA->last+LB->last;
}

本文标签:

版权声明:若无特殊注明,本文皆为《尤尤》原创,转载请保留文章出处。

本文链接:线性表的顺序存储结构---顺序表的基本操作 - https://www.yxfseo.cn/post-59.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注