数据结构-顺序表(学习笔记)

顺序表是以数组为储存方式,将n(n>=0)个属性相同的数据元素组成的一个有限序列

顺序表存储结构的实现
①需要一个数组来存放数据
②需要一个整形变量来表示顺序表的长度

一、定义顺序表类型

#define LISTSIZE 100		//顺序表的长度
typedef int DataType;		//顺序表的数据类型

typedef struct
{
	DataType items[LISTSIZE];
	int length;
}SqList;

二、初始化顺序表

int InitList(SqList &L)
{
	L.length=0;
	return 0;
}

三、求顺序表当前元素的个数

int ListLength(SqList L)
{
	return L.length;
}

四、判断顺序表是否为空

int ListEmpty(SqList L)
{
	if(L.length<=0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

五、顺序表的插入操作步骤

  1. 判断顺序表是否已满
  2. 检查插入位置是否合法,即1<=pos<=length+1
  3. 将最后一个元素到第pos个元素之间的元素向后移动一个位置
  4. 将新元素插入空出的位置上
  5. 顺序表的长度加一
int ListInsert(SqList &L,int pos,DataType item)
{
	if(L.length>=LISTSIZE)
	{
		cout<<"顺序表以满,无法插入"<<endl;
		return 0;
	}
	if(pos<=0||pos>L.length+1)
	{
		cout<<"插入位置无效!"<<endl;
		return 0;
	}
	for(int i=L.length-1;i>=pos-1;i--)
	{
		L.items[i+1]=L.items[i];
	}
	L.items[pos-1]=item;
	L.length++;
	
	return 1;
}

六、顺序表的删除操作步骤

  1. 判表空
  2. 检查删除的位置,即1<=pos<=L.length
  3. 将pos+1到length的元素向前移动一个位置
  4. 顺序表的长度减一
int ListDelete(SqList &L,int pos,DataType *item)
{
	if(ListEmpty(L))
	{
		cout<<"顺序表空,无法删除"<<endl;
		return 0;
	}
	if(pos<=0||pos>L.length)
	{
		cout<<"删除位置无效!"<<endl;
  		return 0;
	}
	*item=L.items[pos-1];
	for(int i=pos;i<L.length;i++)
	{
		L.items[i-1]=L.items[i];
	}
	L.length--;
	
	return 1;
}

七,获取顺序表上的指定元素

int GetElem(SqList L,int pos,DataType *item)
{
	if(ListEmpty(L))
 	{
  		cout<<"顺序表空,无法查找"<<endl;
 		return 0;
 	}
 	if(pos<=0||pos>L.length)
 	{
  		cout<<"查找位置无效!"<<endl;
    		return 0;
 	}
 	*item=L.items[pos-1];
	return 1;
}

八、查找指定元素在顺序表中的位置

int Find(SqList L,DataType item)
{
	if(ListEmpty(L))
  	{
    		cout<<"顺序表空,无法查找"<<endl;
   		return 0;
  	}
	int pos=0;
	while(pos<L.length&&item!=L.items[pos])
	{
		pos++;
	}
	if(pos<L.length)
	{
		return pos++;
	}
	else
	{
		return 0;
	}
}

九、遍历顺序表

int TraverseList(SqList L)
{
	for(int i=0;I<L.length;i++)
	{
		cout<<L.items[i]<<" ";
	}
	cout<<endl;
	return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值