顺序表
#include <iostream>
using namespace std;
#define Node ElemType
#define MAXSIZE 3
#define ERROR 0
typedef int DataType;
//创建一个节点
class Node
{
public:
DataType data;
};
//创建一个顺序列表类
class SqList
{
public:
//构造函数初始化
SqList();
//在析构函数中进行销毁
~SqList();
//定义创建一个顺序表
void create_SqList(int n);
//遍历顺序表
void traverse_SqList();
//根据下标查找元素
ElemType get_elem_by_index(int i);
//判断顺序表是否为空
bool is_empty();
//判断表是否满了
bool is_full();
//获取顺序表的长度
int get_length();
//是否含有查找的值
int get_elem_by_elem(DataType data);
//插入操作
void insert_SqList(int n, DataType data);
//头插
void insert_SqList_head(DataType data);
//尾插
void insert_SqList_end(DataType data);
//删除指定位置
void delete_elem(int i);
//按值删除
void delete_elem_at_elem(DataType data);
//删除所有元素
void delete_all();
//在头部删除元素
void delete_head();
private:
//顺序表的基地址
Node* elem;
//顺序表的长度
int length;
};
//初始化
SqList::SqList()
{
//基地址指向一个新开辟的数组
elem = new ElemType[MAXSIZE];
int length = 0;//定义顺序表的长度
}
SqList::~SqList()
{
delete[] elem;//销毁
}
//创建顺序表
void SqList::create_SqList(int n)
{
if (n < 0)
{
cout << "输入节点个数有误!" << endl;
}
else
{
//循环向数组插入元素
for (int i = 0; i < n; i++)
{
cout << "请输入第" << i + 1 << "个节点元素:";
cin >> elem[i].data;
}
length = n;//更改长度
}
}
//遍历顺序表
void SqList::traverse_SqList()
{
for (int i = 0; i < length; i++)
{
cout << "第" << i + 1 << "个元素是:" << elem[i].data << endl;
}
}
//通过下标获取元素
ElemType SqList::get_elem_by_index(int i)
{
if (i < 1 || i > length)
{
cout << "查询的下标不存在" << endl;
}
else
{
return elem[i - 1];
}
}
//判空
bool SqList::is_empty()
{
if (length == 0)
return true;
else
return false;
}
//判断顺序表是否满了
bool SqList::is_full()
{
if (length == MAXSIZE) return true;
else
return false;
}
//获取顺序表的长度
int SqList::get_length()
{
return length;
}
//按值查找
int SqList::get_elem_by_elem(DataType data)
{
for (int i = 0; i < length; i++)
{
if (elem[i].data == data) return i + 1;
else return -1;
}
}
//插入一个元素
void SqList::insert_SqList(int i, DataType data)
{
//不能插入的情况
if (i<1 || i>length + 1)
{
cout << "输入的下标不合法" << endl;
}
else if (length > MAXSIZE)
{
cout << "已经达到最大长度" << endl;
}
else
{
//这里的length是有几个元素,要定位到数组下标的最后一个
//i插入为第几个元素,对应下标要-1
for (int j = length - 1; j >= i - 1; j--)
{
elem[j + 1] = elem[j];//后边的往后挪挪
}
elem[i - 1].data = data;
length++;
}
}
//头插法
void SqList::insert_SqList_head(DataType data)
{
//全体往后挪挪
for (int i = length - 1; i >= 0; i--)
{
elem[i + 1] = elem[i];
}
elem[0].data = data;
length++;
}
//尾插法
void SqList::insert_SqList_end(DataType data)
{
//无法插入的情况
if (length > MAXSIZE)
{
cout << "已经达到最大长度!" << endl;
}
else
{
elem[length].data = data;
length++;
}
}
//根据下标删除一个节点
void SqList::delete_elem(int i)
{
if (i<1 || i>length)
{
cout<<"输入下标不合法!"<<endl;
}
else
{
for (int j = i; j <= length - 1; j++)//都往前挪挪
{
elem[j - 1] = elem[j];
}
length--;
}
}
//按值删除元素
void SqList::delete_elem_at_elem(DataType data)
{
int i = 0;
while (elem[i].data != data && i < length)
{
i++;
}
for (int index = i; index < length; index++)
{
elem[index] = elem[index + 1];
}
length--;
}
//删除所有元素
void SqList::delete_all()
//???
{
for (int i = length; i > 0; i--)
{
elem[i] = elem[i - 1];
length--;
}
}
//在头部删除元素
void SqList::delete_head()
{
for (int i = 0; i < length - 1; i++)
{
elem[i - 1] = elem[i];
}
length--;
}
int main()
{
return 0;
}
自己测试吧!最好是写一个尝试一个,不然太多了
网友评论