【数据结构】线性表的顺序存储实现

【数据结构】线性表的顺序存储实现

//线性表的顺序存储实现
#include<iostream>
using namespace std;

typedef int element;
#define Maxsize 1000
//线性表的结构,由预设一个数组和实际数组长度组成
typedef struct {
	element data[Maxsize];
	int length;
}list;

void Initial(list *l)
{
	l->length = 0;
}
/*
插入元素
1.判断表是否为满
2.判断插入位置是否合法
3.进行插入操作:
i为插入的位置,取值为1<=i<=length,每插入一个元素,length+1,即数组的实际长度(有数据的长度)
向前插入元素,先将位置i-1(数组的实际位置)以及后面的所有元素向后移动一个位置,再将元素插入到i-1的位置上
*/

int insertl(list *l,int i,element item)
{
	if (l->length == Maxsize)
	{
		cout << "表已满,无法插入数据" << endl;
		return -1;
	}		
	if (i<1 || i>l->length + 1)
	{
		cout << "位置不合法" << endl;
		return -1;
	}
	for (int j = l->length;j >= i - 1;j--)
		l->data[j] = l->data[j-1];
	l->data[i - 1] = item;
	l->length++;
	return 0;
}
/*
删除元素
1.判断表是否为空
2.判断删除位置是否合法,不可删除没有元素的位置
3.进行删除操作,先将删除位置的后面所有的元素向前移动一个位置,即覆盖删除元素的位置,完成删除操作,再将length-1
注意:删除位置为1,实际位置为0(数组从0开始计算)
*/
int deletel(list *l,int i,element &e)
{
	if (l->length == 0)
	{
		cout << "表为空,无法删除" << endl;
		return -1;
	}
	if (i<1 || i>l->length)
	{
		cout << "删除位置不合法" << endl;
	}
	else
	{
		e = l->data[i - 1];
		for (int j = i;j <= l->length-1;j++)
			l->data[j - 1] = l->data[j];
		l->length--;
		return e;
	}
}
/*
遍历表

*/

void visitl(list *l)
{
	cout << "表中的元素为:";
	for (int i = 0;i < l->length;i++)
	{
		element p = l->data[i];
		cout << p<<" ";
	}
	cout << endl;

}

void main()
{
	int i, count, position, num2,h,h1;
	element num;
	list l;
	Initial(&l);
	cout << "请输入插入表的个数:";
	cin >> count;
	cout << "请输入插入表的元素:" << endl;
	for (i = 1;i<=count;i++)
	{
		cin >> num;
		insertl(&l,i,num);
	}
	cout << "-----------" << endl;
	cout << "请输入删除元素的位置:";
	cin >> position;
	deletel(&l, position,num2);
	cout << "删除元素为:" << num2<<endl;
	visitl(&l);
	cout << endl;
	h = 2;
	h1 = 110;
	cout << "-----------" << endl;
	cout << "向位置" << h<<"插入元素" <<h1<<endl;
	insertl(&l, h, h1);
	visitl(&l);

}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值