【数据结构】线性表的顺序存储实现
//线性表的顺序存储实现
#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);
}
结果:
