顺序表的接口
#include<iostream>
#include<cstdio>
#define max 40
using namespace std;
class SeqList
{
private:
int ArrayList[max];
int curr_position;
int size;
public:
SeqList();
bool isEmpty();//判断表空
bool isFull();//判断表满
void display();//输出表的数据
void insert(int element);//在位置curr_position中插入元素
void insert(int element, int pos);//在位置pos中插入元素
void erase();//删除当前位置的元素
void erase(int pos);//删除位置pos处的元素
int getPos();//获取当前位置
int find(int pos);//查找元素
int getSize();//获取表长
};
顺序表的基本操作
1.顺序表的初始化
设置初始表长为0,当前位置为数组下标为0的元素
SeqList::SeqList()
:size(0), curr_position(0)
{
}
2.判空/判满
bool SeqList::isEmpty()
{
return size==0;
}
bool SeqList::isFull()
{
return curr_position==(max-1);
}
3.表的输出
void SeqList::display()
{
for (int i = 0; i < size; i++)
{
cout << ArrayList[i] << " " ;
}
}
4.插入操作
1.在当前位置后面插入一个元素
1.判断表是否被填满
2.对数组进行逆序遍历,同时数组向右移动一位(从数组下标为Size开始遍历到当前位置+1)
再将空出来的位置赋值
3.表长增加1
void SeqList::insert(int element)
{
if (isFull())
{
cerr << "表已满" << endl;
return;
}
else
{
for (int i = size; i > curr_position; i--)
{
ArrayList[i] = ArrayList[i - 1];
}
ArrayList[curr_position] = element;
size++;
}
}
2.在指定位置的后面插入元素
void SeqList::insert(int element, int pos)
{
if (isFull() || pos >= max)
{
return;
}
else
{
for (int i = size; i > pos; i--)
{
ArrayList[i] = ArrayList[i - 1];
}
ArrayList[pos] = element;
size++;
}
}
5. 删除操作
1.删除当前位置的元素
1.表长减一
2.从当前位置到表尾(数组下标为size-1)进行正向遍历,对数组进行左移操作
void SeqList::erase()
{
size--;
for (int i = curr_position; i < size-1; i++)
{
ArrayList[i] = ArrayList[i + 1];
}
}
2.删除指定位置的元素
void SeqList::erase(int pos)
{
if (pos >= max)
{
cerr << "无效位置" << endl;
}
else
{
size--;
for (int i = pos; i < size; i++)
{
ArrayList[i] = ArrayList[i + 1];
}
}
}
6.其余操作
1.获取当前位置
int SeqList::getPos()
{
return this->curr_position;
}
2.获取表长
int SeqList::getSize()
{
return this->size;
}
3.查找操作
对顺序表进行顺序遍历
int SeqList::find(int pos)
{
if (pos > max)
{
cerr << "无效位置" << endl;
}
else
return ArrayList[pos];
}
测试函数
#include<iostream>
using namespace std;
#include<random>
#include"SeqList.h"
int main()
{
SeqList test;
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(1, 10);
int time;
cin >> time;
for (int i = 0; i < time; i++)
{
int ele;
ele = dis(gen);
//cin >> ele;
test.insert(ele);
}
cout << "表中元素为:" << endl;
test.display();
cout << endl;
cout << "表的大小为:" << test.getSize() << endl;
test.erase(9);
test.display();
}