线性表1——顺序表

零、说明

  1. 优势:编写方便、得到某位置元素方便
  2. 劣势:可能造成浪费空间、插入删除可能要移动大量元素

一、数据类型

int olist[MAXSIZE];

二、初始化

用数组第0位存储顺序表中元素数量

void Initial(int olist[MAXSIZE])
{
	olist[0]=0;
}

三、插入与删除

  1. 插入:代码中有如下操作:判断满、(后移)、插入、元素个数++,
    有两种插入
    ①将data插入到表中position的位置
void Insertelem(int olist[MAXSIZE],int data,int position)
{
	if(olist[0]==MAXSIZE)//如果表中元素数量已达到最大
	{
		cout<<"FULL"<<endl;
		return;
	}
	int i;
	for(i=olist[0];i>=position;i--)//将元素从后往前依次后移
	{
		olist[i+1]=olist[i];
	}
	olist[position]=data;//把data放进去
	olist[0]++;
}

[n+1]<-[n],[n]<-[n-1]…[pos+1]<-[pos]
因此上述循环中的i从slist[0](即n)到position(即pos)

  ②输入表中元素,直接插入到尾部

void Insertelem(int olist[MAXSIZE],int data)
{
	if(olist[0]==MAXSIZE)
	{
		cout<<"FULL"<<endl;
		return;
	}
	olist[olist[0]+1]=data;
	olist[0]++;
}
  1. 删除:代码中有如下操作:存储那个位置的元素、(前移)、元素个数–
    删除位于position位置的元素的同时返回这个元素
int deleteelem(int olist[MAXSIZE],int position)
{
	int i,ret;
	ret=olist[position];
	for(i=position+1;i<=olist[0];i++)//将元素从前往后依次前移
	{
		olist[i-1]=olist[i];
	}
	olist[0]--;
	return ret;
}

[pos]<-[pos+1],[pos+1]<-[pos+2]…[n-1]<-[n]
因此上述前移循环中的i从position+1(即pos+1)到slist[0](即n)

四、搜索

挨个比较,返回位置

int Search(int olist[MAXSIZE],int data)
{
	int i,pos;
	pos=-1;//如果没有搜索到,就直接返回-1,说明没找到
	for(i=1;i<=olist[0];i++)//注意,slist[0]是表中元素个数
	{
		if(olist[i]==data)
		{
			pos=i;
			break;
		}
	}
	return pos;
}

五、其他操作

  1. 清空表:直接
void Clear(int olist[MAXSIZE])
{
	olist[0]=0;
}
  1. 遍历
void Traverse(int olist[MAXSIZE])
{
	if(olist[0]==0)
	{
		cout<<"EMPTY"<<endl;
		return;
	}
	int i;
	for(i=1;i<=olist[0];i++)
	{
		cout<<olist[i]<<' ';
	}
	cout<<endl;
}
  1. 得到某个位置的元素
     直接读取数组对应位置
  2. 求表长
     表长即为slist[0]

六、使用

int main()
{
	int a[MAXSIZE];
	Initial(a);
	...
}

Initial之后即可使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值