定义顺序表的结构和基本操作,并写一个主函数调用这些基本操作以便对它们进行验证
顺序表是一种线性数据结构,它的构造方式是用一组地址连续的存储单元依次存储线性表的数据元素。顺序表可以通过下标访问元素,因此具有定位快、插入删除慢的特点。
下面是顺序表的结构和基本操作:
#define MAXSIZE 100 // 定义线性表最大长度为100
typedef struct {
int data[MAXSIZE]; // 存放元素的数组
int length; // 当前线性表的长度
} SqList; // 定义顺序表类型
// 基本操作
// 初始化操作
void initList(SqList &L)
{
L.length = 0; // 初始化长度为0
}
// 插入操作
bool insertList(SqList &L, int pos, int x)
{
if (pos < 1 || pos > L.length + 1 || L.length == MAXSIZE) // 判断插入位置是否合法,以及线性表是否已满
return false;
for (int i = L.length; i >= pos; i--) // 从后往前,依次将元素后移
L.data[i] = L.data[i - 1];
L.data[pos - 1] = x; // 将新元素插入到指定位置
L.length++; // 长度加1
return true;
}
// 删除操作
bool deleteList(SqList &L, int pos)
{
if (pos < 1 || pos > L.length) // 判断删除位置是否合法
return false;
for (int i = pos - 1; i < L.length - 1; i++) // 将指定位置后面的元素前移
L.data[i] = L.data[i + 1];
L.length--; // 长度减1
return true;
}
// 遍历操作
void traverseList(SqList L)
{
for (int i = 0; i < L.length; i++)
cout << L.data[i] << " ";
cout << endl;
}
// 查找操作
int searchList(SqList L, int x)
{
for (int i = 0; i < L.length; i++)
if (L.data[i] == x)
return i + 1;
return 0; // 如果没找到,返回0
}
下面是一个主函数调用这些基本操作的例子,以便对它们进行验证:
#include <iostream>
using namespace std;
int main()
{
SqList L;
initList(L);
insertList(L, 1, 3);
insertList(L, 2, 5);
insertList(L, 3, 7);
traverseList(L);
deleteList(L, 2);
traverseList(L);
int pos = searchList(L, 5);
if (pos != 0)
cout << "5的位置是:" << pos << endl;
else
cout << "没有找到5" << endl;
return 0;
}
输出如下:
3 5 7
3 7
5的位置是:2