顺序线性表头文件
#pragma once
#include<iostream>
#define ListSize 100
#define DataType int
using namespace std;
class SqList
{
public:
void InitList(SqList& L); //初始化线性表,将长度设置成0
bool ListEmpty(SqList L); //判断线性表是否为空,为空返回真
int GetElem(SqList L, int i, DataType& e); //按照序号取值
int LocateElem(SqList L, DataType e); //查找线性表L中与给定元素e相等的元素。
int InsertList(SqList& L, int i, DataType e);
/*在顺序表的第i个位置插入元素e,插入成功返回1,如果插入位置不合法返回-1,顺序表满返回0*/
int DeleteElem(SqList& L, int i, DataType& e);
/*将顺序表中的第i个位置删除,并将其值赋值给e*/
int ListLength(SqList L);
void ClearList(SqList& L);
private:
DataType m_list[ListSize];
int m_length;
};
实现
#include<iostream>
#include"Sqlist.h"
using namespace std;
void SqList::InitList(SqList& L)
{
L.m_length = 0; //将线性表的长度置为0
}
bool SqList::ListEmpty(SqList L)
{
if (L.m_length)
return false;
else
return true;
}
int SqList::GetElem(SqList L, int i, DataType& e)
{
for (int x = 0; x < L.m_length; x++)
{
if (i > L.m_length || i < 1)
{
return -1;
}
e = this->m_list[i - 1];
}
return 1;
}
int SqList::LocateElem(SqList L, DataType e)
{
for (int i = 0; i < L.m_length; i++)
{
if (e == L.m_list[i])
{
return i;
}
}
return 0;
}
int SqList::InsertList(SqList& L, int i, DataType e)
{
if (i<1 || i>L.m_length + 1)
{
cout<<"插入位置不合法!\n";
return -1;
}
else if (L.m_length >= ListSize)
{
cout<<"顺序表已满,不能插入数据!\n";
return 0;
}
else
{
for (int j = L.m_length; j >= i; j--) //将第i位置以后的元素依次后移
{
L.m_list[j] = L.m_list[j - 1];
}
L.m_list[i - 1] = e; //插入元素到第i个位置
L.m_length += 1; //将顺序表长加1
return 1;
}
return 0;
}
int SqList::DeleteElem(SqList& L, int i, DataType& e)
{
if (i < 1||i<L.m_length)
{
cout << "删除位置不合法" << endl;
return 0;
}
if (L.ListEmpty(L))
{
cout << "线性表为空,无法删除" << endl;
return -1;
}
else
{
e = L.m_list[i - 1];
for (int j = i; j < L.m_length; j++)
{
L.m_list[j - 1] = L.m_list[j];
}
L.m_length--;
return 1;
}
}
int SqList::ListLength(SqList L)
{
return L.m_length;
}
void SqList::ClearList(SqList& L)
{
L.m_length = 0;
}